合并两个排序的链表

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode Merge(ListNode list1,ListNode list2) {
		 if(list1==null){
			 return list2;
		 } if(list2 == null){
			 return list1;
		 }
			 ListNode ln1;
			 ListNode ln;
			 if(list1.val<=list2.val){
				 ln =list1;
				 list1 = list1.next;
			 }else{
				ln =list2;
				 list2 = list2.next;
			 }
			ln1 =ln;
			
				while(true){
					if(list1==null||list2==null){
						break;
					}
						if(list1.val<=list2.val){
			    		 ln.next =list1;
			    		 ln = ln.next;
			    		 list1 = list1.next;
			    	 }
			    		 else{
			    		 ln.next =list2;
			    		 ln = ln.next;
			    		 list2 =list2.next;
			    	 }
						
			    	 }
				 if(list1==null){
			    	 ln.next = list2;
			     }else{
			    	 ln.next = list1; 
			     }
				 return ln1;	 
    }
}

这我犯了一个错误,在while语句判定我一开始用的是list1!=null||list2!=null,会报不存在,后来才想到,不应该这样写,因为一个有null的话,再用.val肯定会报不存在错误。
思路:先创建两个链表,ln1用于返回(相当于表头),ln2用于从list1和list2转移结点(比较大小,谁小就把它加进新的链表尾部,直到有一个链表为空,把另一个链表的结点直接连到新链表就完成了),构成新的链表所以ln2肯定会移动,最后返回肯定ln2肯定不对。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值