【leetcode】Intersection of Two Linked Lists

Intersection of Two Linked Lists

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.

先从头到尾扫描,看两个链表长度相差多少。

然后让长的链表先走过这个长度差,然后两个链表同时走,直到相遇

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 class Solution {
10 public:
11     ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
12
13
14         if(headA==NULL||headB==NULL)
15         {
16             return NULL;
17         }
18
19         ListNode *hA=headA,*hB=headB;
20
21         int lenA=1,lenB=1;
22         while(hA->next!=NULL)
23         {
24             lenA++;
25             hA=hA->next;
26         }
27
28         while(hB->next!=NULL)
29         {
30             lenB++;
31             hB=hB->next;
32         }
33
34
35         if(hA!=hB)
36         {
37             return NULL;
38         }
39
40         int dis=lenA-lenB;
41
42
43         hA=headA;
44         hB=headB;
45
46         if(dis>0)
47         {
48             while(dis)
49             {
50                 hA=hA->next;
51                 dis--;
52             }
53         }
54
55         if(dis<0)
56         {
57             dis=-dis;
58             while(dis)
59             {
60                 hB=hB->next;
61                 dis--;
62             }
63         }
64
65         while(hA!=hB)
66         {
67             hA=hA->next;
68             hB=hB->next;
69         }
70
71
72         return hA;
73     }
74 };
75  
时间: 2024-08-08 09:40:18

【leetcode】Intersection of Two Linked Lists的相关文章

【leetcode】Intersection of Two Linked Lists(easy)

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 i

【Leetcode】Intersection of Two Linked Lists in JAVA

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. 还是倒着想,把listnode放进栈里,然后一个一个pop出来,直到不一样的话,

LeetCode【160】Intersection of Two Linked Lists

For example, the following two linked lists: A: a1 → a2 c1 → c2 → c3 B: b1 → b2 → b3 begin to intersect at node c1. 思路比较清晰,首先确定二者的长度并计算长度之差的绝对值dis,让较长链表先走dis步,然后两个指针一起走.如果两个指针相等,则返回,否则当指针达到NULL时,没有交点. AC代码如下: void getLength(ListNode *head , int& len)

[LeetCode] 160. Intersection of Two Linked Lists 解题思路

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 i

leetCode 160. Intersection of Two Linked Lists 链表

160. Intersection of Two Linked Lists 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

【LeetCode每天一题】 Intersection of Two Linked Lists(两个链表的入口节点)

Write a program to find the node at which the intersection of two singly linked lists begins. For example, the following two linked lists: begin to intersect at node c1. Example 1: Input: intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5],

[leetCode][003] Intersection of Two Linked Lists

[题目]: 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: 1. If the two linke

Leetcode 160 Intersection of Two Linked Lists(快慢指针)

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 i

[C++]LeetCode: 60 Intersection of Two Linked Lists

题目: 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