【2024考研】题解9 | #两个链表的第一个公共结点#
两个链表的第一个公共结点
https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
ListNode *p1 = pHead1;
ListNode *p2 = pHead2;
//不是自己的事就互相甩锅,都甩不掉时,第一个公事就找到了
while(p1 != p2){
p1 = p1 ? p1->next : pHead2;
p2 = p2 ? p2->next : pHead1;
}
return p1;
}
};
/*
算法思想:
该算法使用了双指针的思想。假设两个链表的长度分别为m和n,首先两个指针p1和p2分别指向两个链表的头节点。然后它们同时向后遍历,当其中一个指针p1或p2到达链表的末尾时,将其指向另一个链表的头节点。这样,当两个指针相遇时,即找到了第一个公共节点。如果两个链表没有公共节点,那么最终两个指针都会指向NULL,退出循环。
时间复杂度:
该算法的时间复杂度为O(m+n),其中m和n分别为两个链表的长度。
空间复杂度:
该算法的空间复杂度为O(1),只使用了常数级别的额外空间。
总结:
该算法通过双指针的方式来寻找两个链表的公共节点,时间复杂度为O(m+n),空间复杂度为O(1)。
*/
2024考研数据结构 文章被收录于专栏
本人考研刷算法题,立此专栏练习强化。