合并两个已经排序的链表

问题描述:给定两个链表的头指针,并且这两个链表都已经有顺序了,将这两个链表合并成一个链表,并且使合并后的链表依然有序。

分析:这个问题有点类似于归并排序中的归并步骤。具体思想如下:

首先比较两个链表的头结点,并将较小的作为合并后链表的头节点,然后移动指针,再比较两个指针的节点,以此类推,

如果其中一个链表已经结束了,则将另一个链表的其余节点全部移到合并的链表中。

由于比较简单,我就不再写写具体的程序代码了,读者可以自行验证。

时间: 2024-07-31 10:38:51

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

合并两个递增排序的链表

1 typedef struct Link 2 { 3 int data; 4 struct Link* next; 5 }NODE,*pNODE; 1 NODE *merge(pNODE *pphead1, pNODE *pphead2) 2 { 3 NODE *mergeHead = NULL, *ptail = NULL; 4 pNODE pcur1 = *pphead1, pcur2 = *pphead2; 5 if(pcur1 == NULL) 6 return pcur2; 7 el

剑指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:   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

合并两个已序单链表

// 合并两个已序单链表 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 =

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

合并两个有序的单链表 给定两个有序单链表的头节点 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+

数据结构-合并两个已经排序的数组

合并两个已经排序的数组 1 /// <summary> 2 /// 合并两个已经排序的数组 3 /// </summary> 4 /// <param name="arr1"></param> 5 /// <param name="arr2"></param> 6 public static void MergeSortedArray(int[] arr1,int[] arr2) 7 { 8 L

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

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

算法研究之合并两个已排序的数组java版

package com.zken.test; /** * @author iamzken * 2015-8-28 * 合并两个有序数组 * */ public class Sorter2 { public static void merge2SortedArray(int[] a , int[] b , int[] c){ //a数组的当前索引 int i = 0; //b数组的当前索引 int j = 0; //c数组的当前索引 int k = 0; //循环,只要a和b都没有遍历完就一直循环

[Leetcode] Merge k sorted lists 合并k个已排序的链表

Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 思路:这题最容易想到的是,(假设有k个链表)链表1.2合并,然后其结果12和3合并,以此类推,最后是123--k-1和k合并.至于两链表合并的过程见merge two sorted lists的分析.复杂度的分析见JustDoIT的博客.算法复杂度:假设每个链表的平均长度是n,则1.2合并,遍历2n个