合并两个有序的链表

1. 题目形容

输出两个枯燥递增的链表,输入两个链表合成后的链表,当然咱们须要合成后的链表满足枯燥不减规定。

2. 示例

3. 解题思路

思路:非递归

比拟两个链表的首结点,哪个小的的结点则合并到第三个链表尾结点,并向前挪动一个结点。

步骤一后果会有一个链表先遍历完结,或者没有

第三个链表尾结点指向残余未遍历完结的链表

返回第三个链表首结点

递归办法:

4. Java实现

非递归的实现办法:应用一个辅助的头部节点: ListNode root = new ListNode(-1)
/*public class ListNode {    int val;    ListNode next = null;    ListNode(int val) {        this.val = val;    }}*/public class Solution {    public ListNode Merge(ListNode list1,ListNode list2) {        if (list1 == null){            return list2;        }        if (list2 == null){            return list1;        }                ListNode node = new ListNode(-1); // 用于保留头部节点        ListNode root = node;                while (list1 != null && list2 != null){            if (list1.val < list2.val){                node.next = list1;                node = node.next; // 更新node节点,指向下一个                list1 = list1.next;            }else{                node.next = list2;                node = node.next;                list2 = list2.next;            }        }                // 可能某个链表还残余值,下列例子就链表2 会残余        // 比方链表1: 1->2->4        // 链表2:    3->5->6        if(list1 == null){            node.next = list2;        }                if (list2 == null){            node.next = list1;        }        return root.next;            }}
应用递归的实现办法:
/*public class ListNode {    int val;    ListNode next = null;    ListNode(int val) {        this.val = val;    }}*/public class Solution {    public ListNode Merge(ListNode list1,ListNode list2) {        if (list1 == null){            return list2;        }        if (list2 == null){            return list1;        }        ListNode ret = null;        if (list1.val < list2.val){            ret = list1;            ret.next = Merge(list1.next, list2);        }else{            ret = list2;            ret.next = Merge(list1, list2.next);        }                return ret;    }}

5. Python实现

比较简单的非递归的实现办法:
#非递归实现合并两个有序的链表class Solution1:    # 返回合并后列表    def Merge(self, pHead1, pHead2):            if not pHead1:            return pHead2        if not pHead2:            return pHead1                start = None         p = None         while pHead1 and pHead2:            if pHead1.val <= pHead2.val:                print(pHead1.val)                if start is None:                    start = p = pHead1                else:                    p.next = pHead1                    p = p.next #更新p 结点                pHead1 = pHead1.next # 更新有序链表的结点            else:                if start is None:                    start = p = pHead2                else:                    p.next = pHead2                    p = p.next                 pHead2 = pHead2.next         #可能某个链表始终还剩值        if not pHead1: #如果第一个链表都是空的话            p.next = pHead2        else:            p.next = pHead1        return start 
应用递归的实现办法:
# -*- coding:utf-8 -*-# class ListNode:#     def __init__(self, x):#         self.val = x#         self.next = Noneclass Solution:    # 返回合并后列表    def Merge(self, pHead1, pHead2):        # write code here        if not pHead1: #如果一个链表不存在的话,返回另外一个链表            return pHead2        if not pHead2:            return pHead1                if pHead1.val <= pHead2.val:            ret = pHead1            ret.next = self.Merge(pHead1.next, pHead2)        else:            ret = pHead2            ret.next = self.Merge(pHead1, pHead2.next)                    return ret 
如果您感觉本文有用,请点个“在看”