[劍指offer] --17.合併兩個排序的連結串列
阿新 • • 發佈:2018-11-15
題目描述
輸入兩個單調遞增的連結串列,輸出兩個連結串列合成後的連結串列,當然我們需要合成後的連結串列滿足單調不減規則。
/*
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; } } }