合并两个有序链表

原创 2016年05月31日 23:38:28

一、问题:合并两个有序链表,合并后的单链表依然有序。

二、分析:

1.有如下两个有序链表str1和str2

 

 

 

 

 

 

 

 

 

2.合并后的新链表的头结点定义为newpHead,采用摘结点法:

 

 

三、代码实现(c语言)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
sListNode* MergeList(sListNode* FirpHead, sListNode* SecpHead)
{
 if(FirpHead == NULL)
 {
  return SecpHead;
 }
 if(SecpHead == NULL)
 {
  return FirpHead;
 }
 sListNode* newpHead = NULL;
 sListNode* firCur = FirpHead, *secCur = SecpHead;
 sListNode* tail = NULL;
 if(firCur->data < secCur->data)
 {
  newpHead = firCur;
  firCur = firCur->next;
 }
 else
 {
  newpHead = secCur;
  secCur = secCur->next;
 }
 tail = newpHead;
 while(firCur != NULL && secCur != NULL)
 {
  if(firCur->data < secCur->data)
  {
   tail->next = firCur;
   firCur = firCur->next;
  }
  else
  {
   tail->next = secCur;
   secCur = secCur->next;
  }
  tail = tail->next;
 }
 if(firCur == NULL)
 {
  tail->next = secCur;
 }
 if(secCur == NULL)
 {
  tail->next = firCur;
 }
 return newpHead;

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

两个有序链表求并

  • 2013年12月01日 15:30
  • 2KB
  • 下载

笔试题 合并两个有序链表

已知两个链表head1和head2各自有序,请把他们合并成一个链表依然有序 1  3 5 7, 2 4 6 8, 合并 1 2 3 4 5 6 7 8 代码实现如下//思路:比较两个链...

5-15 两个有序链表序列的合并

已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的并集新非降序链表S3。 输入格式: 输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用-1−1表示序列的结尾(-1−1不属于这...

浙江大学PAT上机题解析之2-11. 两个有序链表序列的合并

浙江大学 PAT 有序链表合并效率问题

17_7_13:合并两个有序链表。实现1+2+3+...+n,不使用常规方法

1.【基础题】–合并两个有序链表,合并以后的链表依旧有序。 2.【附加题】–实现1+2+3…+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字。(这个题有多种解法,大家可以尽量去思考,这个...

链表面试题(二):冒泡排序、合并两个有序链表、查找中间节点、查找倒数K个节点

这里接上一篇博客, 7. 单链表排序(冒泡排序&快速排序) //7.单链表排序(冒泡排序) void BubbleSort(pNode* pHead) { assert(NULL != pHead)...

PAT:两个有序链表序列的合并(Java实现)

两个有序链表序列的合并 已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的并集新非降序链表S3。 public class Test4 { publi...

5,两个不交叉的有序链表的合并

思路: 比较大小,控制指针指向,如果一个链表已经结束,则把剩下的链表加上去即可。 注意: 要判断输入时候正确。 两个链表是否为空链表等特殊情况。 如果交叉了怎么办。后面会介绍...

PAT 两个有序链表序列的合并

PAT 两个有序链表序列的合并
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:合并两个有序链表
举报原因:
原因补充:

(最多只允许输入30个字)