1.题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
2.算法描述
1.新建一个头节点作为新链表的头节点,返回时,返回头结点的下一个结点。
2.两个指针p1,p2分别指向两个单调递增链表的首结点,
每
次
将
p
1
,
p
2
指
向
结
点
中
具
有
较
小
值
的
结
点
删
除
并
插
入
新
的
链
表
,
结
点
值
较
小
的
指
针
后
移
。
直
到
有
一
个
指
针
为
空
\red{每次将p1,p2指向结点中具有较小值的结点删除并插入新的链表,结点值较小的指针后移。直到有一个指针为空}
每次将p1,p2指向结点中具有较小值的结点删除并插入新的链表,结点值较小的指针后移。直到有一个指针为空。
3.判断p1,p2指向的链表是否未空。不为空的链表直接链接到新链表的尾结点之后。
3.代码描述
3.1.Java代码
/*
public class ListNode{
int val;
ListNode next = null;
public ListNode(int val){
this.val = val;
}
}
*/
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
ListNode head = new ListNode(-1);
ListNode cur = head;
ListNode p1 = list1, p2 = list2;
while(p1 != null && p2 != null){
if(p1.val < p2.val){
cur.next = p1;
cur = cur.next;
p1 = p1.next;
}
else{
cur.next = p2;
cur = cur.next;
p2 = p2.next;
}
}
if(p1 != null)
cur.next = p1;
if(p2 != null)
cur.next = p2;
return head.next;
}
}
3.2.Python代码
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回合并后列表
def Merge(self, pHead1, pHead2):
# write code here
newHead = ListNode(-1)
cur = newHead
p1 = pHead1
p2 = pHead2
while p1 and p2:
if p1.val < p2.val:
cur.next = p1
cur = cur.next
p1 = p1.next
else:
cur.next = p2
cur = cur.next
p2 = p2.next
if p1:
cur.next = p1
if p2:
cur.next = p2
return newHead.next