这道题主要的问题在于两条链表长度不同,而且是按照地址来确定相交点的。我刚开始的想法是将两个链表的值分别扔进vector里,然后倒着遍历,当出现不同时,+1就是相交点。想一想定义一个
vector<ListNode*>这样应该可以
这道题有一个很巧的做法,就是定义头节点,让它们对面条链表都进行遍历,这样就很巧的消除了这两条链表的长度差。
意思就是first先对A链表进行遍历 second先对B进行遍历。当短的那条遍历完后,将它再对长的那条遍历,长的那条遍历完后对短的那条遍历。这样就很巧的消除长度差,两个节点遍历的长度都是两条链表长度和。这样找到交叉点就很简单。
/**
-
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)
{ListNode* first=headA; ListNode* second=headB; while(first!=second) { if(first!= NULL) first=first->next; else first=headB; if(second!= NULL) second=second->next; else second=headA; } return first;
}
};