本文主要是介绍力扣面试题02.07.链表相交,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
原题链接:力扣面试题02.07.链表相交
思路
两个长度不确定是否一致的链表,如果相交,那么一定是有一个链表结点相同,注意不是值相同而是结点相同,也就代表了是需要指针是相同的才行
根据图可以得出,相交后的结点都是一致的,那么需要做的就是把两个链表长度统一,再从头结点逐步遍历,直至指针结点相同,返回相同的指针结点即可
如果没有相同的指针结点 则代表没有相交 返回NULL
全代码:
/*** 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) {//遍历headA链表和headB链表的长度ListNode* curA = headA;ListNode* curB = headB;int lenA = 0,lenB = 0;while(curA != NULL){curA = curA ->next;lenA++;}while(curB != NULL){curB = curB ->next;lenB++;}if(lenB > lenA){//需要让lenA成为长度最长的链表swap(lenA,lenB);swap(headA,headB);}int len = lenA - lenB;while(len--){headA = headA ->next;}curA = headA;curB = headB;while(curA != NULL){if(curA == curB){return curA;}curA = curA ->next;curB = curB ->next;}return NULL;}
};
这篇关于力扣面试题02.07.链表相交的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!