合并链表

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
  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相当于一个指针移动。

posted @ 2017-09-07 22:13  竹马今安在  阅读(162)  评论(0编辑  收藏  举报