题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
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
head = ListNode(0)
tmp = head
while pHead1 is not None and pHead2 is not None:
if pHead1.val <= pHead2.val:
tmp.next = pHead1
pHead1 = pHead1.next
else:
tmp.next = pHead2
pHead2 = pHead2.next
tmp = tmp.next
if pHead1 is None:
tmp.next = pHead2
elif pHead2 is None:
tmp.next = pHead1
return head.next
#第二种方法:
class Solution:
# 返回合并后列表
def Merge(self, pHead1, pHead2):
# write code here
#首先判断两个链表是不是为空。
if pHead1 == None:
return pHead2
if pHead2 == None:
return pHead1
#比较两个链表当前指针的元素值的大小。小的那一方为新的一个表头。
newHead = pHead1 if pHead1.val < pHead2.val else pHead2
pTmp1 = pHead1
pTmp2 = pHead2
#判断 如果新表头 是 表1 的头的话 那么 新表头
if newHead == pTmp1:
pTmp1 = pTmp1.next
else:
pTmp2 = pTmp2.next
#
previousPointer = newHead
while pTmp1 and pTmp2:
if pTmp1.val < pTmp2.val:
previousPointer.next = pTmp1
previousPointer = pTmp1
pTmp1 = pTmp1.next
else:
previousPointer.next = pTmp2
previousPointer = pTmp2
pTmp2 = pTmp2.next
if pTmp1 == None:
previousPointer.next = pTmp2
else:
previousPointer.next = pTmp1
return newHead
c++
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if(pHead1==NULL)
return pHead2;
else if(pHead2==NULL)
return pHead1;
ListNode* newhead=NULL;
if(pHead1->val<pHead2->val)
{
newhead=pHead1;
newhead->next=Merge(pHead1->next,pHead2);
}
else
{
newhead=pHead2;
newhead->next=Merge(pHead1,pHead2->next);
}
return newhead;
}
};