两个有序单链表合并
2014-05-16 20:54
253 查看
与将两个有序数组合并的思路一致,需要三个指针。
【代码】
【代码】
#include<stdio.h> #include<stdlib.h> typedef struct node{ int data; struct node *next; }Node; Node *Merge(Node *head1,Node *head2) { Node *head; Node *p1=head1->next; Node *p2=head2->next; //单链表为空的情况 if(head1==NULL) return head2; if(head2=NULL) return head1; //找出两个链表中第一个结点值较小的结点,并使head指向该结点 if(p1->data<p2->data) head=head1; else head=head2; Node *pcur=head; while(p1&&p2) { if(p1->data<p2->data) { //满足要求的结点放在pcur指向的节点后面,所以pcur初始化必须指向头结点,不能指向第一个结点 pcur->next=p1; pcur=p1; p1=p1->next; pcur->next=NULL; } else { pcur->next=p2; pcur=p2; p2=p2->next; pcur->next=NULL; } } //将剩余的结点连接到pcur上,完成整个合并过程 if(p1) pcur->next=p1; if(p2) pcur->next=p2; return head; } void main() { Node *head1,*p,*k1; head1=(Node *)malloc(sizeof(Node)); head1->next=NULL; Node *head2,*q,*k2; head2=(Node *)malloc(sizeof(Node)); head2->next=NULL; Node *result; int i; //头插法建立带头结点的链表 for(i=4;i>0;i--) { p=(Node *)malloc(sizeof(Node)); p->data=i; p->next=head1->next; head1->next=p; } for(i=6;i>2;i--) { q=(Node *)malloc(sizeof(Node)); q->data=i; q->next=head2->next; head2->next=q; } result=Merge(head1,head2); result=result->next; while(result) { printf("%d ",result->data); result=result->next; } printf("\n"); }
相关文章推荐
- [数据结构]单链表 合并两个非递减有序表成新表也是非递减表
- 合并两个有序单链表
- 合并两个有序单链表
- 单链表操作之合并两个有序单链表---递归 and 非递归实现
- 非递减合并两个有序单链表
- 合并两个有序单链表
- 链表面试题-合并两个有序单链表(递归和非递归)
- 合并两个有序单链表,合并后依旧有序
- 两个有序单链表的合并&两个有序数组的合并
- Leetcode:Merge Two Sorted Lists 合并两个有序单链表
- 两个有序单链表合并成一个有序单链表的java实现
- 编程实现合并两个有序单链表
- 3.两个有序单链表合并为一个有序的单链表
- 不开辟新空间,两个有序单链表合并为一个有序单链表
- 单链表------合并两个有序链表Ha、Hb到Hc
- 两个有序单链表合并成一个有序单链表的java实现
- 两个无序单链合并成一个有序单链表
- 合并两个单链表为递减有序的单链表
- Java 非递归 和非递归方法 实现两个有序单链表的合并
- 数据结构 — 1. 两个非递减有序单链表合并为非递增有序单链表