两个有序单链表的合并
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; }
相关文章推荐
- 单链表------合并两个有序链表Ha、Hb到Hc
- 合并两个有序单链表
- Java单链表基本操作(八)--合并两个有序单链表
- 合并两个有序单链表,使得合并后的链表仍然有序
- 不开辟新空间,两个有序单链表合并为一个有序单链表
- 微软暑期实习笔试题 合并两个有序单链表
- 3.两个有序单链表合并为一个有序的单链表
- 两个无序单链合并成一个有序单链表
- 两个有序单链表合并成一个有序单链表的java实现
- 9、单链表的合并,两个有序单链表,合并为一个有序链表。
- 合并两个有序单链表
- 合并两个单链表为递减有序的单链表
- 写程序。设ha和hb分别是两个带头结点的非递减有序单链表的头指针,试设计算法,将这两个有序链表合并成一个非递增有序的单链表。要求使用原链表空间,
- 合并两个有序单链表
- c++ 创建有序单链表,以及两个有序单链表合并
- Leetcode:Merge Two Sorted Lists 合并两个有序单链表
- [数据结构]单链表 合并两个非递减有序表成新表也是非递减表
- 合并两个有序单链表的递归方法
- 合并两个有序单链表
- 编程实现两个有序单链表的合并