循环链表小练习

来源:互联网 发布:下载切换mp3软件 编辑:程序博客网 时间:2024/06/14 06:03

循环链表小练习

上完课顺便练习循环链表的创建以及输出

    # include <stdio.h>    typedef struct List{        int data;        struct Node * next;    }Node,*LinkList;    int main (){        LinkList head ,p ,q , k,start;        head = (LinkList) malloc (sizeof(Node));//为头结点创建空间         int n,num=0;//        scanf("%d",&n);//定义链表的长度         q = head;//q代替head的位置 ,q作为临时保存头结点的指针,防止头结点被覆盖后,找不回来         while (n --){//            p = (LinkList) malloc (sizeof(Node));//,为当前节点p开辟空间             scanf("%d",&p->data);//循环输入链表中的每一个值             p->next = head->next;//            head->next = p;//            head =p;//        }        //通过一个循环的移动,head此时已经移动到了尾部         head->next = q->next;//此时再将之前临时保存的头结点q拿出来 ,完成收尾相连的工作         //free(head);         /*到这之后就建立好了,后续工作就是输出操作以及优化*/         start = q->next;//start可以理解为第一个节点,就是开始的地方 ,q当前还是头结点         k = start->next;//此时,k被赋予了第二个节点的值         while (1){//            printf ("%d ",k->data);//此时输出的是第二个节点的值             num ++;//计数器加一             k = k->next;//k的值往下移动一位             if(k == start){//如果k移动到了start (也就是第一个节点的位置)                 printf ("%d ",k->data);//就输出第一个节点的值                 num++;//计数器再加一                 break;//跳出循环             }        }        printf ("\n%d ",num);//        return 0;//    }
原创粉丝点击