Day12_剑指Offer

Day12_剑指Offer

package com.sorrymaker.day3612;

/**
 * 输入两个链表,找出它们的第一个公共节点。
 * @Author nextGame
 * @Date 2021/8/23 20:26
 * @Version 1.0
 */
public class GetIntersectionNode {

    public class ListNode {
        int val;
        ListNode next;

        ListNode(int x) {
            val = x;
            next = null;
        }
    }

    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {

        ListNode A = headA, B = headB;
        while (A!=B){
            //当A遍历完自己的链条的时候,再从B的头部从新遍历,而B也是如此。
            // 最后A == B 的时候,说明该节点为AB链条的首个相遇节点。
            A = A!=null? A.next:headB;
            B = B!=null? B.next:headA;
        }
        return A;
    }
}
package com.sorrymaker.day3612;

/**
 * 输入两个递增排序的链表,
 * 合并这两个链表并使新链表中的节点仍然是递增排序的。
 * @Author nextGame
 * @Date 2021/8/23 20:00
 * @Version 1.0
 */
public class MergeTwoLists {

    public class ListNode {
        int val;
        ListNode next;

        ListNode(int x) {
            val = x;
        }
    }

    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {

        //dum是个伪头节点,
        ListNode dum = new ListNode(0), cur = dum;
        while (l1 != null && l2 != null) {
            if (l1.val < l2.val) {
                //当l1.val小于l2.val时候,合并链表就加上l1的值,
                cur.next = l1;
                //l1值被拿去合并了,那就让l1 = l1.next
                l1 = l1.next;
            } else {
                //当l1>=l2的值的时候,合并链表就加上l2的值。
                cur.next = l2;
                l2 = l2.next;
            }
            //每次cur都会向前走一格。直到循环结束。
            cur = cur.next;
        }
        //当循环结束,即l1 或l2 为空,此时判断l1是否为空,当为空的时候,说明l2还没合并完成,反之亦然如此。
        cur.next = l1 != null ? l1 : l2;
        return dum.next;
    }
}
posted @ 2021-08-23 22:10  独眼龙  阅读(26)  评论(0)    收藏  举报