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