【Leetcode】160、相交链表 Intersection of Two Linked Lists

    科技2025-01-08  12

    [Leetcode] 160、相交链表 Intersection of Two Linked Lists

    一、题目描述

    题目链接 https://leetcode-cn.com/problems/intersection-of-two-linked-lists/

    编写一个程序,找到两个单链表相交的起始节点。

    如下面的两个链表**:**

    今天开始分块刷题嘞!

    首先先刷刷链表吧!

    最开始小白整了半天,愣是没看懂题目输入啥意思?

    后来才发现,题目原来只输入俩链表?

    最开始整了半天,暴力无果,遂看答案。

    这道题最棘手的事儿就是两个链表长度不同,如果长度相同那就太好办了。

    看了看答案发现还是精妙。

    具体做法:

    指针 pA 指向 A 链表,指针 pB 指向 B 链表,依次往后遍历如果 pA 到了末尾,则 pA = headB 继续遍历如果 pB 到了末尾,则 pB = headA 继续遍历比较长的链表指针指向较短链表head时,长度差就消除了如此,只需要将最短链表遍历两次即可找到位置

    这视频挺有意思

    浪漫求解视频

    贴代码

    2、我的代码

    /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { ListNode aHead = headA; ListNode bHead = headB; boolean aflag = true; boolean bflag = true; while(aHead!=null||bHead!=null){ if(aHead==null&&aflag){ aHead = new ListNode(-55); aHead.next = headB; aflag = false; } if(bHead==null&&bflag){ bHead = new ListNode(-56); bHead.next = headA; bflag = false; } if(aHead!=null&&bHead!=null&&aHead == bHead){ return aHead; } aHead = aHead.next; bHead = bHead.next; } return null; } }

    小白写的代码就是垃圾。。

    3、大神的代码

    public ListNode getIntersectionNode(ListNode headA, ListNode headB) { if (headA == null || headB == null) return null; ListNode pA = headA, pB = headB; while (pA != pB) { pA = pA == null ? headB : pA.next; pB = pB == null ? headA : pB.next; } return pA; }
    Processed: 0.012, SQL: 8