Leetcode-merge-two-sorted-lists

题目描述


Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.

将两个链表连起来。


/**
* 思路:
    1.输入问题:考虑为空!
    2.新链表的第一个结点问题,由于一般情况下第一个结点都需要特殊处理,比较实用的解决办法是在第一个结点前增加一个虚拟的头结点,将实际的第一个结点一般化。最后输出的时候输出这个虚拟结点的下一个结点就OK
    3.如何为新链表选择下一个结点(已经虚拟出第一个结点了。)这个比较容易,比大小就OK了。取小的并在此链表前进一步。
    4.注意循环的终止条件!
    5.终止后并没有结束!
* @param l1
* @param l2
* @return
*/


 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if(l1 == null && l2 == null)
    		return null;
    	if(l1 == null)
    		return l2;
    	if(l2 == null)
    		return l1;
    	ListNode newHead = new ListNode(0);
    	ListNode tail = newHead;    //这个tail真实太棒了,一直沿着正确的路径走下去
    	ListNode cur1 = l1;
    	ListNode cur2 = l2;
        while(cur1!=null && cur2!=null){
 
        	if(cur1.val < cur2.val){
        		tail.next = cur1;
        		tail = tail.next;
        		cur1 = cur1.next;
        	}else{
        		tail.next = cur2;
        		tail = tail.next;
        		cur2 = cur2.next;
        	}
        }
        if(cur1 != null)
        	tail.next = cur1;
        if(cur2 != null)
        	tail.next = cur2;
        
        return newHead.next;
    }
}
这个tail节点简直不能更棒!它走过的路径就是最终的结果。为了把头结点一般化,在前面加一个节点,然后开始往后走,最终返回头结点的next节点,这样的思路下来就很简单了,首先是定义一个头结点,然后就是一个大循环,循环内比较链表节点值的大小,tail指向值小的节点,同时,当前节点cur被赋值为下一个节点。最终返回的是定义的头结点的next。整个过程清晰明了!我献上了我的膝盖!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值