美文网首页
剑指 Offer 25. 合并两个排序的链表

剑指 Offer 25. 合并两个排序的链表

作者: bangbang2 | 来源:发表于2020-07-08 20:52 被阅读0次
    image.png

    解题思路

    //ListNode list=new ListNode(0) 初始化一个节点值为0的空节点,最常用最正规写法,new ListNode()默认为0(这其实不就是构造函数吗).相当于初始化一个空节点,=null仅仅声明,没有初始化,啥也没干
    基本思路:
    1:l1,l2链表都不为空,比较后不断移动
    2:l1为空,l2不为空,将l2剩余值利用while循环加入到链表
    3:同2
    小细节
    ListNode dum = new ListNode();//初始化一个节点,值默认为0
    ListNode cur=dum;//为什么要这样呢?可以理解为dum和cur都是指针,指向一个节点(也可以理解为节点的等于代表两个节点的等价)。cur一会会指向合并后的链表,因为cur会不断的移动,但dum不会移动,dum其实就是代表合并后的链表,但一定注意返回的是dum.next,因为不能包括dum本身,本身是0

    代码

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
              ListNode dum = new ListNode();
             ListNode cur=dum;
             while(l1!=null&&l2!=null){
                 if(l1.val<l2.val) {
                     cur.next=l1;
                     l1=l1.next;
                     }else {
                     cur.next=l2;
                     l2=l2.next;
                     }
                     cur=cur.next;
             } 
            while(l1!=null&&l2==null){
                cur.next=l1;
                l1=l1.next;
                cur=cur.next;
            }
            while(l2!=null&&l1==null){
                cur.next=l2;
                l2=l2.next;
                cur=cur.next;
            }
             return dum.next;
        }
    }
    

    相关文章

      网友评论

          本文标题:剑指 Offer 25. 合并两个排序的链表

          本文链接:https://www.haomeiwen.com/subject/bmphcktx.html