合并两个已序单链表

// 合并两个已序单链表

PSListNode MergeList(PSListNode pL1, PSListNode pL2)

{

PSListNode pNewHead = NULL ;

PSListNode pL1Node = pL1 ;

PSListNode pL2N0de = pL2 ;

PSListNode pNode = NULL ;

PSListNode pTailNode = NULL ;

if (pL1 == NULL)

{

return pL2 ;

}

if (pL2 == NULL)

{

return pL1 ;

}

if (pL1Node->data > pL2N0de->data)

{

pNode = pL2N0de;

pL2N0de = pL2N0de->pNext;

}

else

{

pNode = pL1Node;

pL1Node = pL1Node->pNext;

}

pNewHead = pNode;

pTailNode = pNode;

while (pL1Node&&pL2N0de)

{

if (pL1Node->data > pL2N0de->data)

{

pNode = pL2N0de;

pL2N0de = pL2N0de->pNext;

}

else

{

pNode = pL1Node;

pL1Node = pL1Node->pNext;

}

pTailNode->pNext = pNode;

pTailNode = pTailNode->pNext;

}

if (pL1Node == NULL )

{

pTailNode->pNext = pL2N0de;

}

else

{

pTailNode->pNext = pL1Node;

}

return pNewHead;

}

void Print(PSListNode pHead)

{

PSListNode pCurNode = pHead ;

while (pCurNode)

{

printf( "%d->", pCurNode->data);

pCurNode = pCurNode->pNext;

}

printf( "NULL\n");

}

时间: 2024-10-09 21:20:27

合并两个已序单链表的相关文章

合并两个有序的单链表,合并之后的链表依然有序【出现频率高】

合并两个有序的单链表,合并之后的链表依然有序: 这道题经常被各公司考察. 例如: 链表1:   1->2->3->4 链表2:   2->3->4->5 合并后:   1->2->2->3->3->4->4->5 解题思路:   挨着比较链表1和链表2.   这个类似于归并排序.尤其要注意两个链表都为空.和其中一个为空的情况.只需要O (1) 的空间.时间复杂度为O (max(len1,len2)) public Node me

栈和队列----合并两个有序的单链表

合并两个有序的单链表 给定两个有序单链表的头节点 head1 和 head2,合并两个有序链表,合并后链表依然有序,并返回合并后的链表的头节点,例如:0->2->3->7->null   和   1->3->5->7->9->null,合并后的链表为 0->1->2->3->3->5->7->7->9->null. [解题思路] 如果两个链表的长度分别为M 和 N ,那么时间复杂度可以做到 O(M+

Leetcode21--->Merge Two Sorted Lists(合并两个排序的单链表)

题目: 给出两个排序的单链表,合并两个单链表,返回合并后的结果: 解题思路: 解法还是很简单的,但是需要注意以下几点: 1.  如果两个链表都空,则返回null; 2.  如果链表1空,则返回链表2的头节点:反之,如果链表2为空,则返回链表1的头节点: 3.  两个链表都不空的情况下: 比较两个链表的头节点的值,哪个小,则新链表的头节点为哪个: 举例:l1: 1->3->5; l2:2->4->6->7;则:head = l1的头节点,此时head.next = l1.nex

算法总结之 合并两个有序的单链表

给定两个有序单链表的头节点head1 和 head2 ,请合并两个有序链表,合并后的链表依然有序,并返回合并后链表的头节点 假设两个链表长度为M和N 直接给出时间复杂度为(M+N) 额外空间复杂度O(1) 1 如果两个链表中一个为空  则无需合并 返回另一个的链表头节点 2 比较head1 和 head2 的值,小的是合并链表的头节点,记为head   在之后的步骤里 哪个链表的头节点值更小,另一个链表的所有节点都会一次插入到这个链表中 3不妨设head节点所在的链表1, 另一个链表2,1和2都

合并两个排序的单链表

[题目] 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是依照递增排序的. [分析] 合并单链表,须要找到头结点,对照两个链表头结点后,确定头结点,再确定头结点下一个结点,循环递归的如前面一样操作确定每一个结点位置,同一时候考虑边界条件,假设两个链表为空.则肯定无需合并了,就是空链表,假设一个链表为空,还有一个不为空,则返回不为空的链表.详细分析流程能够看以下的样例: [測试代码] #include<stdio.h> #include<stdlib.h> #inclu

线性数据结构案例4 —— 合并两个有序的单链表 合并之后依然有序

一.介绍 emsp; 我们定义一个新链表然后,将两个链表的元素依次比较,放入比较最小的放到新链表前面. 二.代码 public static Node mergeByOrder(Node l1, Node l2) { if(l1.next == null || l2.next == null) { return l1.next == null ? l2 : l1; } Node newLinkedHead = new Node(0, ""); l1 = l1.next; // 头节点没

剑指Offer15 合并两个已排序链表

1 /************************************************************************* 2 > File Name: 15_MergeTwoSortList.cpp 3 > Author: Juntaran 4 > Mail: [email protected] 5 > Created Time: 2016年08月30日 星期二 15时49分47秒 6 ********************************

逆序单链表

? 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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86

1.11判断两个无环单链表是否相交

判断两个无环单链表是否交叉 题目描述: 如上图,这两个链表相交于结点5,要求判断两个链表是否相交,如果相交,找出相交处的结点. 解题思路: 方法一:Hash 法 如上图所示,如果两个链表相交,那么它们一定会有公共的结点,由于结点的地址或引用可以作为结点的唯一标识,因此,可以通过判断两个链表中的结点是否有相同的地址或引用来判断链表是否相交. 方法二:首尾相接法 将这两个链表首尾相连(例如把链表headl尾结点链接到head2的头指针),然后检测这个链表是否存在环,如果存在,则两个链表相交,而环入口