【LeetCode】Intersection of Two Linked Lists

来源:互联网 发布:js二维数组姓名,年龄 编辑:程序博客网 时间:2024/06/08 00:37
Intersection of Two Linked Lists 
Total Accepted: 16034 Total Submissions: 58142 My Submissions Question Solution 
Write a program to find the node at which the intersection of two singly linked lists begins.
For example, the following two linked lists:
A:          a1 → a2                   ↘                     c1 → c2 → c3                   ↗            B:     b1 → b2 → b3
begin to intersect at node c1.
Notes:
If the two linked lists have no intersection at all, return null.
The linked lists must retain their original structure after the function returns.
You may assume there are no cycles anywhere in the entire linked structure.
Your code should preferably run in O(n) time and use only O(1) memory.
Credits:
Special thanks to @stellari for adding this problem and creating all test cases.
Show Tags
【解题思路】
求解两个链表的公共节点,一定是后缀相等。
具体思路是,哪个链表长,就先遍历,一直到两个链表长度相等,再同时比较。

Java AC

/** * 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) {        int len1 = 0;        ListNode p = headA;        while(p != null){            p = p.next;            len1++;        }        int len2 = 0;        p = headB;        while(p != null){            p = p.next;            len2++;        }        if(len1 > len2){            int k = 0;            while(k < (len1-len2)){                headA = headA.next;                k++;            }        }        if(len2 > len1){            int k = 0;            while(k < (len2 - len1)){                headB = headB.next;                k++;            }        }        p = headA;        ListNode q = headB;        while(p != q){            p = p.next;            q = q.next;        }        return p;    }}

Python AC

# Definition for singly-linked list.# class ListNode:#     def __init__(self, x):#         self.val = x#         self.next = Noneclass Solution:    # @param two ListNodes    # @return the intersected ListNode    def getIntersectionNode(self, headA, headB):        len1 = 0;        p = headA        while p:            p = p.next            len1 += 1                len2 = 0        p = headB        while p:            p = p.next            len2 += 1                k = 0        if len1 > len2:            while k < (len1 - len2):                headA = headA.next                k += 1        else:            while k < (len2 - len1):                headB = headB.next                k += 1        while headA != headB:            headA = headA.next            headB = headB.next        return headA        



0 0
原创粉丝点击