题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
}
}
解题思路
- 这里提供了递归和非递归版本
- 注意:currentNode.next = list2; 是为了链接上链表,之间currentNode= list2;含义就表了
public class Solution {
/**
* 递归版本
* @param list1
* @param list2
* @return
*/
public ListNode Merge(ListNode list1,ListNode list2) {
if (list1==null){
return list2;
}
if (list2 == null) {
return list1;
}
if (list1.val<list2.val){
list1.next = Merge(list1.next,list2);
return list1;
} else {
list2.next = Merge(list1,list2.next);
return list2;
}
}
/**
* 非递归版本
* @param list1
* @param list2
* @return
*/
public ListNode MergeNotRec(ListNode list1,ListNode list2) {
if (list1==null){
return list2;
}
if (list2 == null) {
return list1;
}
ListNode mergeNode = null;
ListNode currentNode = null;
while (list1!=null&&list2!=null) {
if (list1.val < list2.val) {
if (mergeNode == null) {
currentNode = list1;
mergeNode = currentNode;
} else {
currentNode.next = list1;
currentNode = currentNode.next;
}
list1 = list1.next;
} else {
if (mergeNode == null) {
currentNode = list2;
mergeNode = currentNode;
} else {
currentNode.next = list2;
currentNode = currentNode.next;
}
list2 = list2.next;
}
}
if (list1==null){
currentNode.next=list2;
} else if (list2 == null){
currentNode.next = list1;
}
return mergeNode;
}
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
}