题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
思路:题目相对简单,有两个思路,一个是遍历两个链表的公共长度,按值的大小把各个节点连接起来,最后把较长链表的剩余部分追加到最后。第二个思路,这个类似于自然合并排序,可以使用递归分治的思想来解决问题,还让你容易就能把这个问题分解成子问题。
实现代码
非递归:
/*
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 head;
if(list1.val<=list2.val) {
head = list1;
list1 = list1.next;
}
else {
head = list2;
list2 = list2.next;
}
ListNode pNode = head;
while(list1 != null && list2 != null) {
if(list1.val <= list2.val) {
pNode.next = list1;
list1 = list1.next;
}
else {
pNode.next = list2;
list2 = list2.next;
}
pNode = pNode.next;
}
while(list1 != null) {
pNode.next = list1;
pNode = pNode.next;
list1 = list1.next;
}
while(list2 != null) {
pNode.next = list2;
pNode = pNode.next;
list2 = list2.next;
}
return head;
}
}
递归:
/*
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 head;
if(list1.val < list2.val) {
head = list1;
head.next = Merge(list1.next, list2);
}
else {
head = list2;
head.next = Merge(list1, list2.next);
}
return head;
}
}
https://www.cnblogs.com/wxisme/category/672272.html