c-串連兩個鏈表

來源:互聯網
上載者:User

標籤: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-串連兩個鏈表

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.