【链表】合并两个排序的链表

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

 1 /*
 2 public class ListNode {
 3     int val;
 4     ListNode next = null;
 5
 6     ListNode(int val) {
 7         this.val = val;
 8     }
 9 }*/
10 public class Solution {
11     public ListNode Merge(ListNode list1,ListNode list2) {
12
13         if (null == list1 && null == list2) {
14             return null;
15         }
16
17         if (null == list1 && null != list2) {
18             return list2;
19         }
20
21         if (null == list2 && null != list1) {
22             return list1;
23         }
24
25         ListNode head = null; // 合并后的头节点
26
27         ListNode p1 = null; // 遍历list1的指针
28         ListNode p2 = null; // 遍历list2的指针
29         ListNode p = null; // 指向当前合并后的链表的尾节点
30
31         // 确定头节点
32         if (list1.val < list2.val) {
33             head = list1;
34             p1 = list1.next;
35             p2 = list2;
36         } else {
37             head = list2;
38             p1 = list1;
39             p2 = list2.next;
40         }
41
42         p = head;
43
44         // 遍历和比较list1和list2,将较小值加入新的链表
45         while (null != p1 && null != p2) {
46             if (p1.val > p2.val) {
47                 p.next = p2;
48                 p2 = p2.next;
49             } else {
50                 p.next = p1;
51                 p1 = p1.next;
52             }
53             p = p.next;
54         }
55
56         // 其中一个链表遍历完毕,直接将另一个链表添加到新链表尾
57         if (null == p1) {
58             p.next = p2;
59         }
60
61         if (null == p2) {
62             p.next = p1;
63         }
64
65         return head;
66
67     }
68 }
时间: 2024-12-11 14:31:42

【链表】合并两个排序的链表的相关文章

面试题 17:合并两个排序的链表

题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按 照递增排序的. 两个指针指向两个链表的头结点,取其中值小的作为新链表的头结点,和之前的结点串联,如此递归. 注意用例: 两个链表都为null: 其中一个链表为null: 两个链表有多个结点,有相同的值,不同的值. package offer; /*面试题 17:合并两个排序的链表 题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按 照递增排序的.*/ public class Problem17 { st

合并两个排序的链表(剑指offer)

合并两个排序的链表 参与人数:1527时间限制:1秒空间限制:32768K 通过比例:27.96% 最佳记录:0 ms|8552K(来自  牛客708854号) 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 题目链接:http://www.nowcoder.com/practice/d8b6b4358f774294a89de2a6ac4d9337?rp=1&ru=/ta/coding-interviews&qru=/ta/codin

面试题17:合并两个排序的链表

ListNode类(结点类) 1 package leetcode.utilities; 2 3 public class ListNode { 4 public int val ; 5 public ListNode next ; 6 public ListNode(int val) { 7 // TODO Auto-generated constructor stub 8 this.val = val; 9 this.next = null ; 10 } 11 //打印链表 12 publi

面试题:合并两个排序的链表

题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增的. 例如: /*合并两个排序的链表*/ /* 链表节点定义如下: struct ListNode { int _data; ListNode* _next; }; */ ListNode* MergeList(ListNode* pHead1, ListNode* pHead2) { if (pHead1 == NULL) //链表1为空链表 { return pHead2; } else if (pHead2 == NU

剑指offer_面试题17_合并两个排序的链表(两种思维)

题目:输入两个递增排序的链表,合并这两个链表,并使新链表中的结点仍然是按照递增排序的. 第一种思维:合并两个排序的链表,类似于合并两个排序数组,所不同的仅是一个用链表保存数据,一个用数组保存数据. 算法如下:(下面的算法前提是:头结点 不是 链表的第一个数据节点.) /**方法一:合并两个排序链表,使用了新创建的链表来保存,没有改动两个原始链表*/ ListNode *merge_tow_list(ListNode *pHead1,ListNode *pHead2) { if(NULL == p

剑指offer系列源码-合并两个排序的链表

题目1519:合并两个排序的链表 时间限制:1 秒内存限制:128 兆特殊判题:否提交:1309解决:615 题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. (hint: 请务必使用链表.) 输入: 输入可能包含多个测试样例,输入以EOF结束. 对于每个测试案例,输入的第一行为两个整数n和m(0<=n<=1000, 0<=m<=1000):n代表将要输入的第一个链表的元素的个数,m代表将要输入的第二个链表的元素的个数. 下面

剑指Offer面试题:16.合并两个排序的链表

PS:这也是一道出镜率极高的面试题,我相信很多童鞋都会很眼熟,就像于千万人之中遇见不期而遇的人,没有别的话可说,唯有轻轻地问一声:“哦,原来你也在这里? ” 一.题目:合并两个排序的链表 题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的.例如输入下图中的链表1和链表2,则合并之后的升序链表如链表3所示. 链表结点定义如下,使用C#描述: public class Node { public int Data { get; set; } // 指向后一个节点 pu

剑指offer面试题17:合并两个排序的链表

题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点人是按照递增排序的.解题思路:两个链表分别都已经是有序的了,遍历链表的时候只要比较两个链表当前位置大小,取出最小的添加到新链表中. 可以有递归.循环两种方式来解决. 1 package Solution; 2 3 4 public class No17MergeSortedLists { 5 6 public static class ListNode { 7 int data; 8 ListNode next; 9 10 publi

剑指offer面试题17——合并两个排序的链表

题目1519:合并两个排序的链表 题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则.(hint: 请务必使用链表.) 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行为两个整数n和m(0<=n<=1000, 0<=m<=1000):n代表将要输入的第一个链表的元素的个数,m代表将要输入的第二个链表的元素的个数.下面一行包括n个数t(1<=t<=1000000):代表链表一中的元素.接

【剑指offer】Q17:合并两个排序的链表

def Merge(head1, head2): if head1 == None: return head2 if head2 == None: return head1 psuhead = ListNode(-1) tail = psuhead while head1 and head2: if head1.val < head2.val: cur = head1 head1 = head1.next else: cur = head2 head2 = head2.next cur.next