您的位置:首页 > 其它

两个有序单链表的合并

2009-12-25 10:00 323 查看
有序单链表的合并就是两个之前都已排好序的链表,将它们合并成一个链表。合并的过程中对于两个链表值相等的结点也要链到最终的链表中去。

源代码如下:

#include <stdio.h>
#include <malloc.h>

struct Node{
int data;
Node *next;
};

typedef struct Node Node;

Node *Merge(Node *head1,Node *head2)
{
Node *p1 = NULL;
Node *p2 = NULL;
Node *head = NULL;

//找出两个链表中第一个结点较小的结点,head记录较小结点的头结点
if(head1->next->data < head2->next->data)
{
head = head1;
p1 = head1->next;
p2 = head2->next;
}
else
{
head = head2;
p2 = head2->next;
p1 = head1->next;
}

Node *pcur = head;

//在两个链表中遍历比较,将值较小的结点链接到pcur结点后
while(p1 != NULL && p2 != NULL)
{
if(p1->data <= p2->data)
{
pcur->next = p1;
pcur = p1;
p1 = p1->next;
}
else
{
pcur->next = p2;
pcur = p2;
p2 = p2->next;
}
}
//将p1或p2剩余的结点链到pcur之后,完成整个合并的过程
if(p1 != NULL)
pcur->next = p1;
if(p2 != NULL)
pcur->next = p2;

return head;
}

int main()
{
Node *head1 = NULL;
Node *node1 = NULL,*node2 = NULL,*node3 = NULL,*node4 = NULL;
head1 = (Node *)malloc(sizeof(Node));
node1 = (Node *)malloc(sizeof(Node));
node2 = (Node *)malloc(sizeof(Node));
node3 = (Node *)malloc(sizeof(Node));
node4 = (Node *)malloc(sizeof(Node));
node1->data = 1;
node2->data = 2;
node3->data = 3;
node4->data = 4;
head1->next = node1;
node1->next = node2;
node2->next = node3;
node3->next = node4;
node4->next = NULL;

Node *head2 = NULL;
Node *node5 = NULL,*node6 = NULL,*node7 = NULL,*node8 = NULL;
head2 = (Node *)malloc(sizeof(Node));
node5 = (Node *)malloc(sizeof(Node));
node6 = (Node *)malloc(sizeof(Node));
node7 = (Node *)malloc(sizeof(Node));
node8 = (Node *)malloc(sizeof(Node));
node5->data = 3;
node6->data = 4;
node7->data = 5;
node8->data = 6;
head2->next = node5;
node5->next = node6;
node6->next = node7;
node7->next = node8;
node8->next = NULL;

Node *ptr;
ptr = Merge(head1,head2);
ptr = ptr->next;
while(ptr != NULL)
{
printf("%d ",ptr->data);
ptr = ptr->next;
}
printf("/n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: