Intersection of Two Linked List ---LeetCode

来源:互联网 发布:约瑟夫环c语言视频 编辑:程序博客网 时间:2024/06/16 05:05

https://leetcode.com/problems/intersection-of-two-linked-lists/

解题思路:

方法一利用两个表长度的差值,让长的链表先走,直到两个链表长度相等。接着两个表都一步一步走,如果碰头就 return。

/** * 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) {        if(headA == null || headB == null)            return null;        int l1 = 0, l2 = 0;        ListNode p1 = headA;        ListNode p2 = headB;        while(p1 != null) {            l1++;            p1 = p1.next;        }        while(p2 != null) {            l2++;            p2 = p2.next;        }        p1 = headA; p2 = headB;        while(l1 < l2) {            p2 = p2.next;            l2--;        }        while(l1 > l2) {            p1 = p1.next;            l1--;        }        while(p1 != p2) {            p1 = p1.next;            p2 = p2.next;        }        return p1;    }}

方法二是两个链表先同时走,走完了自己的长度接着指向对方的表头,这样循环着走。

/** * 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) {        if(headA == null || headB == null)            return null;        ListNode p1 = headA, p2 = headB;        while(p1 != null && p2 != null && p1 != p2) {            p1 = p1.next;            p2 = p2.next;            if(p1 == null && p2 == null)                return null;            if(p1 == null)                 p1 = headB;            if(p2 == null)                p2 = headA;        }        return p1;    }}
0 0
原创粉丝点击