题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
思路一:不递归的思路,定义中间链表,然后通过比较两个链表的比较,逐渐建立新的链表,这种思路和将两个数组合在一起差不多一样,不过有个注意点,就是返回是链表的头节点,所以还需要设定两个中间链表。
代码一:
java:
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode Merge(ListNode pHead1,ListNode pHead2) {
if(pHead1==null)
return pHead2;
if(pHead2==null)
return pHead1;
ListNode head=new ListNode(1);
head.next=null;
ListNode fhead=head;
while(pHead1!=null&&pHead2!=null){
if(pHead1.val<=pHead2.val){
head.next=pHead1;
head=head.next;
pHead1=pHead1.next;
}
else {
head.next=pHead2;
head=head.next;
pHead2=pHead2.next;
}
}
if(pHead1!=null){
head.next=pHead1;
}
if(pHead2!=null){
head.next=pHead2;
}
return fhead.next;
}
}
js:
/*function ListNode(x){
this.val = x;
this.next = null;
}*/
function Merge(pHead1, pHead2)
{
if(pHead1==null)
return pHead2;
if(pHead2==null)
return pHead1;
var head=new ListNode(1);
var fhead=head;
while(pHead1!=null&&pHead2!=null){
if(pHead1.val<=pHead2.val){
head.next=pHead1;
head=head.next;
pHead1=pHead1.next;
}
else {
head.next=pHead2;
head=head.next;
pHead2=pHead2.next;
}
}
if(pHead1!=null){
head.next=pHead1;
}
if(pHead2!=null){
head.next=pHead2;
}
return fhead.next;
}
思路二:用递归的思路,看代码就懂了,递归思路很简单。递归每一次找到最小的,然后依次。。
代码二:jS
public class Solution {
public ListNode Merge(ListNode pHead1,ListNode pHead2) {
if(pHead1==null)
return pHead2;
if(pHead2==null)
return pHead1;
if(pHead1.val<=pHead2.val){
pHead1.next=Merge(pHead1.next,pHead2);
return pHead1;
}else{
pHead2.next=Merge(pHead1,pHead2.next);
return pHead2;
}
}
}