问题:输入两个链表,找出它们的第一个公共结点。
输入:两个链表头指针
输出:
思路1:经过观察,两个链表在第一个公共节点汇合,如下图
想从最后往前遍历,但由于是单向链表,所以借助栈。
分别把两个链表放入栈中,两个链表的尾节点就位于两个栈的栈顶,接下来比较两个栈顶的节点是否相同,如果相同,则把栈顶弹出,比较新的栈顶,直到找到最后一个相同的节点。
复杂度分析:时间复杂度为O(m+n),空间复杂度为O(m+n)。
思路2:长的链表先走若干步,接着在两个链表同时遍历,找到第一个公共节点。
代码:
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
int getListLen(ListNode* head)
{
int len=0;
ListNode* node= head;
while(no