1. 程式人生 > >合並鏈表

合並鏈表

單調遞增 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相當於一個指針移動。

合並鏈表