cpp
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode *l = NULL, *s = NULL;
int lenA = 0, lenB = 0, gap = 0;
// 求出两个链表的长度
s = headA;
while (s) {
lenA ++;
s = s->next;
}
s = headB;
while (s) {
lenB ++;
s = s->next;
}
// 求出两个链表长度差
if (lenA > lenB) {
l = headA, s = headB;
gap = lenA - lenB;
} else {
l = headB, s = headA;
gap = lenB - lenA;
}
// 尾部对齐
while (gap--) l = l->next;
// 移动,并检查是否有相同的元素
while (l) {
if (l == s) return l;
l = l->next, s = s->next;
}
return NULL;
}
只要思路清晰,代码并不难敲。
嗯嗯,没想到怎样计算链表长度
一、出错点
1.计算两个链表长度时不知道简化,就一下子忘记怎样敲代码了
2.对于尾部对齐不够理解
二、理解后的思路
1.定义两个指针,长l,短s
2.初始化定义
3.计算两个链表的长度
4.求两个链表的差 (方便尾部对齐)
5.尾部对齐 ,因为相交链表部分只在尾部
6.移动,检查是否有相同的元素
三、总结
检查是否有相同的元素要注意题目的输入条件。
还是要多看代码,多敲代码,最重要的是要独立敲出代码!!
加强对题目的理解~