• 面试题02.07 :::info 如果一个链表的第k个节点与另一个链表的第j个节点是同一节点(引用完全相同),则这两个链表相交。 ::: 代码:(详细注释)
      1. class Solution {
      2. public:
      3. ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
      4. ListNode* curA = headA;
      5. ListNode* curB = headB;
      6. int lenA = 0, lenB = 0;
      7. while (curA != NULL) { // 求链表A的长度
      8. lenA++;
      9. curA = curA->next;
      10. }
      11. while (curB != NULL) { // 求链表B的长度
      12. lenB++;
      13. curB = curB->next;
      14. }
      15. curA = headA;
      16. curB = headB;
      17. // 让curA为最长链表的头,lenA为其长度
      18. if (lenB > lenA) {
      19. swap (lenA, lenB);
      20. swap (curA, curB);
      21. }
      22. // 求长度差
      23. int gap = lenA - lenB;
      24. // 让curA和curB在同一起点上(末尾位置对齐)
      25. while (gap--) {
      26. curA = curA->next;
      27. }
      28. // 遍历curA 和 curB,遇到相同则直接返回
      29. while (curA != NULL) {
      30. if (curA == curB) {
      31. return curA;
      32. }
      33. curA = curA->next;
      34. curB = curB->next;
      35. }
      36. return NULL;
      37. }
      38. };
      分析:
      其实这道题,就是假设了如果值相等,则指针相等。
      image.png
      就只需要先右对齐两个列表,然后开始比较是否相等。