如何创建一个单链表
链表节点的定义: typedef struct node { int data; //节点内容 node *next; //下一个节点 }node; 单链表的创建: 1 //创建单链表 2 node *create() 3 { 4 int i = 0; //链表中数据的个数 5 node *head, *p, *q; 6 int x = 0; 7 head = (node *)malloc(sizeof(node)); //创建头节点 8 9 while(1) 10 { 11 printf("Please input the data: "); 12 scanf("%d", &x); 13 if (x == 0) //data 为 0 时创建结束 14 break; 15 p = (node *)malloc(sizeof(node)); 16 p->data = x; 17 if (++i == 1) 18 { //链表只有一个元素 19 head->next = p; //连接到 head 的后面 20 } 21 else 22 { 23 q->next = p; //连接到链表尾端 24 } 25 q = p; //q 指向末节点 26 } 27 q->next = NULL; //链表的最后一个指针为NULL 28 return head; 29 } 上面的代码中,使用while 循环每次从终端读入一个整型数据,并调用malloc 动态分配链表节点内存存储这个整型数据,然后再插入到单链表的末尾
最后当数据为0 时表示插入数据结束,此时把末尾节点的next 指针置为NULL
查找单链表中间元素
解析: 这里使用一个只用一遍扫描的方法
描述如下: 假设 mid 指向当前已经扫描的子链表的中间元素,cur 指向当前以扫描链表的尾节点,那么