合並鏈表
阿新 • • 發佈:2017-09-08
單調遞增 clas 鏈表 遞增 .cn ext class logs 添加元素
輸入兩個單調遞增的鏈表,輸出兩個鏈表合成後的鏈表,當然我們需要合成後的鏈表滿足單調不減規則。
class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public class Solution { public ListNode Merge(ListNode list1,ListNode list2) { ListNode MergeNode=null; ListNode node=null; if(list1==null){ return list2; } if(list2==null){ return list1; } while(list1!=null&&list2!=null){ if(list1.val<=list2.val){ if(MergeNode==null){ MergeNode=node=list1; }else{ node.next=list1; node=node.next; } list1=list1.next; }else{ if(MergeNode==null){ MergeNode=node=list2; }else{ node.next=list2; node=node.next; } list2=list2.next; } } if(list1==null){ node.next=list2; }else{ node.next=list1; } return MergeNode; } }
通過這個題真的是受益匪淺,前面遇到過的很多問題也是得到了解決。當對一個鏈表進行操作的時候,應該用他的替代者進行操作,不然他會不斷地覆蓋下一個。比如
我想實現一個鏈表node1,向其裏面不斷地添加元素 ListNode node1=new ListNode(5); ListNode node2=null; for(int i=0;i<5;i++){ node1.next=new ListNode(i); node1=node1.next; } while(node1!=null){ System.out.println(node1.val); node1=node1.next; }
如果我這麽做,最後鏈表裏面只會剩下一個4,因為他會不斷指向新的節點,而不是把他鏈接起來。而如果
ListNode node1=new ListNode(5); ListNode node2=null; node2=node1; for(int i=0;i<5;i++){ node2.next=new ListNode(i); node2=node2.next; } while(node1!=null){ System.out.println(node1.val); node1=node1.next; }
用一個node2代表node1去做這件事。node1就保存了5 0 1 2 34 五個節點。
首先
node2相當於一個指針移動。
合並鏈表