標籤:style blog io color sp for div log bs
概述
還是相對簡單,不過要記得釋放不用的頭結點即可.
代碼為:
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 linklist16 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 void43 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 void56 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 int72 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 }
c-串連兩個鏈表