1. 程式人生 > >單鏈表之合併兩個連結串列

單鏈表之合併兩個連結串列

1.實現將兩個帶頭結點的連結串列L1和L2進行連線,連線後的連結串列仍然使用原來的儲存空間;結果為連結串列L2連線到L1的末尾。

思路:找到連結串列L1的尾節點,使其指標域指向下一個連結串列的頭結點(同時將連結串列L2所佔用的記憶體空間進行回收)。

合併之前
這裡寫圖片描述

合併之後:
這裡寫圖片描述

#include<stdlib.h>
#include <stdio.h>
typedef int ElemType;
typedef struct linknode
  {
  ElemType data;
  struct linknode *next;
  }LNode, *LinkList;

//建立連結串列
LinkList Create(void) { LinkList head,current; ElemType d; LNode *s; current=head=(LinkList)malloc (sizeof(LNode)); //head節點 current->data=0; d=getchar(); while (d!='\n') { s=(LinkList)malloc (sizeof(LNode)); //為新節點分配記憶體空間 s->data=d; current->next=s; current=
s; d=getchar(); } current->next=NULL; //最後尾指標為NULL return head; } //輸出連結串列 void List(LinkList L) { LinkList p; p=L->next; // while (p!=NULL) { printf ("%2c",p->data); p=p->next; } } //合併連結串列 void CoalitionLinkList(LinkList L1,LinkList L2) { LinkList p; for(p=
L1;p->next!=NULL;p=p->next) ; p->next=L2->next; free (L2); } int main() { LinkList L1,L2; printf ("請輸入第1個連結串列:\n"); L1=Create (); printf ("\n請輸入第2個連結串列:\n"); L2=Create (); CoalitionLinkList (L1,L2); printf ("合併後的連結串列為:\n"); List (L1); system ("pause"); return 0; }