單鏈表之合併兩個連結串列
阿新 • • 發佈:2019-01-31
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;
}