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.移动,检查是否有相同的元素
代码随想录 (programmercarl.com)
三、总结
检查是否有相同的元素要注意题目的输入条件。
还是要多看代码,多敲代码,最重要的是要独立敲出代码!!
加强对题目的理解~