From : https://leetcode.com/problems/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.
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
if(!headA || !headB) return NULL;
int len=0, lenb=0;
ListNode* p = headA, *q = headB;
while(p) {p=p->next; len++;}
while(q) {q=q->next; lenb++;}
if(len >= lenb) {p = headA; q = headB; len = len-lenb;}
else {p = headB; q = headA; len = lenb-len;}
while(len--) p = p->next;
while(p != q) {
p = p->next;
q = q->next;
}
return p;
}
};
本博客介绍了一个算法,用于找到两个单链表相交的起始节点。通过计算链表长度并调整指针位置,算法能够在O(n)时间复杂度下运行,仅使用O(1)内存。
1063

被折叠的 条评论
为什么被折叠?



