给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。
思路
这一题我不认为很难,去吸收知识就行了,不要总是想着独创。
简单来说,就是求两个链表交点节点的指针。
可以知道的是相交节点之后的长度一定是一样的,因此我们只需要计算链表长度,求出差值,然后让链表更长的先移动这个差值,再同时遍历两个链表,比较节点是否相同,若找到,则成功,遍历完没找到就失败。
int getLength(ListNode *head) {int length = 0;while(head!=nullptr){length++;head=head->next;}return length; } ListNode *get(ListNode *headA,ListNode *headB) {int lenA=getLength(headA);int lenB=getLength(headB);ListNode *curA=headA;ListNode *curB=headB;if(lenA>lenB){for(int i=0;i<lenA-lenB;i++){curA=curA->next;}}else{for(int i=0;i<lenB-lenA;i++){curB=curB->next;}}while(curA!=nullptr && curB!=nullptr){if(curA==curB){return curA;}curA=curA->next;curB=curB->next;}return nullptr }
成果
这一题让我打破了过往的心魔,其实也不过如此,这些东西真的很简单。