十六题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
思路:设置两个指针分别指向这两个递增链表。存储对应小的数,并对应的指针自加。当其中一个链表为空时,则把新链表指向另一个链表。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
ListNode *p1=pHead1, *p2=pHead2, *head=new ListNode(0);
head->next=NULL;
ListNode* p0=head;
while(p1 !=NULL && p2 !=NULL)
{
if(p1->val > p2->val)
{
p0->next=p2;
p2=p2->next;
}
else
{
p0->next=p1;
p1=p1->next;
}
p0=p0->next;
}
if(p1==NULL)
p0->next=p2;
else
p0->next=p1;
return head->next;
}
};
/*
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;
if(pHead2==NULL)
return pHead1;
ListNode* head=NULL;
if(pHead1->val <pHead2->val)
{
head=pHead1;
head->next=Merge(pHead1->next,pHead2);
}
if(pHead1->val >pHead2->val)
{
head=pHead2;
head->next=Merge(pHead1,pHead2->next);
}
return head;
}
};
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回合并后列表
def Merge(self, pHead1, pHead2):
p1=pHead1
p2=pHead2
head=ListNode(0)
head.next=None
p0=head
while p1!=None and p2!=None:
if p1.val>p2.val:
p0.next=p2
p2=p2.next
else:
p0.next=p1
p1=p1.next
p0=p0.next
if p1==None:
p0.next=p2
else:
p0.next=p1
return head.next
# write code here