概述
还是相对简单,不过要记得释放不用的头结点即可.
代码为:
1 //将lList2头结点连接在lList1尾结点的后面. 2 void 3 combine(linklist lList1, linklist lList2) { 4 Linknode *lst01Tail = lList1; //最终指向lList1的尾结点. 5 Linknode *tmp; //临时指向lList2的头结点,用于释放lList2表的头结点. 6 while (lst01Tail->next) { 7 lst01Tail = lst01Tail->next; 8 } 9 10 tmp = lList2; 11 lst01Tail->next = lList2->next; //lList1的尾结点连接lList2的首节点. 12 //释放释放lList2表的头结点. 13 free(tmp); 14 tmp = NULL; 15 lList1->data += lList2->data; //修改链表的长度. 16 }
完整代码:
1 #include <stdio.h> 2 #include <malloc.h> 3 4 #define FALSE 0 5 #define TRUE 1 6 7 typedef struct node { 8 int data; 9 struct node *next; 10 } Linknode; 11 12 typedef Linknode *linklist; 13 14 //根据指定结点的个数,初始化一个带有头结点的单链表. 15 linklist 16 init(int n) { 17 linklist lList = (linklist)malloc(sizeof(struct node)); //头结点. 18 lList->next = NULL; //初始时链表为空. 19 lList->data = n; //头结点存储总元素个数. 20 if(!lList) { 21 printf("out of memory!\n"); 22 return FALSE; 23 } 24 int i; 25 Linknode *tail = lList; 26 for(i = 0; i < n; i++) { 27 Linknode * nNew = (Linknode *)malloc(sizeof(struct node)); 28 if(!nNew) { 29 printf("out of memory!\n"); 30 return FALSE; 31 } 32 nNew->data = i + 1; //为新结点赋值. 33 //重新指定尾结点. 34 tail->next = nNew; 35 tail = nNew; 36 nNew->next = NULL; 37 } 38 return lList; 39 } 40 41 //遍历单链表所有结点. 42 void 43 traverse(linklist lList) { 44 Linknode *node; 45 node = lList->next; //开始时指向第一个结点. 46 while(node) { 47 printf("%d ", node->data); 48 node = node->next; 49 } 50 printf("\n"); 51 return; 52 } 53 54 //将lList2头结点连接在lList1尾结点的后面. 55 void 56 combine(linklist lList1, linklist lList2) { 57 Linknode *lst01Tail = lList1; //最终指向lList1的尾结点. 58 Linknode *tmp; //临时指向lList2的头结点,用于释放lList2表的头结点. 59 while (lst01Tail->next) { 60 lst01Tail = lst01Tail->next; 61 } 62 63 tmp = lList2; 64 lst01Tail->next = lList2->next; //lList1的尾结点连接lList2的首节点. 65 //释放释放lList2表的头结点. 66 free(tmp); 67 tmp = NULL; 68 lList1->data += lList2->data; //修改链表的长度. 69 } 70 71 int 72 main(void) { 73 int n = 3; 74 linklist lList = init(n); 75 linklist lList2 = init(n); 76 traverse(lList); 77 combine(lList, lList2); 78 traverse(lList); 79 printf("\n"); 80 }
原文:http://www.cnblogs.com/listened/p/4173423.html