栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

链表相交(C++)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

链表相交(C++)

题目:给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。

leetcode链接
思路:得到两个链表总长度,并计算它们的差值diff,利用差值让两个链表尾端对齐,即移动长链表的指针,共移动diff步。对齐之后可以同时移动两个链表的指针,两个指针若不相等,则继续移动指针,否则相等并返回指针。
代码:

struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

class Solution {	//链表相交
public:
	ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
		ListNode* curA = headA;
		ListNode* curB = headB;
		int lenA = 0, lenB = 0, diff;
		while (curA != NULL) {
			lenA++;
			curA = curA->next;
		}
		while (curB != NULL) {
			lenB++;
			curB = curB->next;
		}
		diff = abs(lenA - lenB);
		curA = headA;
		curB = headB;
		if (lenA > lenB) {
			while (diff--) {
				curA = curA->next;
			}
		}
		else {
			while (diff--) {
				curB = curB->next;
			}
		}
		while (curA != curB) {
			curA = curA->next;
			curB = curB->next;
		}
		return curA;
	}
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/920601.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号