题目描述

image.png

解题思路

详细见专题链表。

  1. public class Solution {
  2. public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
  3. // ListNode node1 = headA;
  4. // ListNode node2 = headB;
  5. // int lengthA = 0;
  6. // int lengthB = 0;
  7. // while (node1 != null) {
  8. // node1 = node1.next;
  9. // lengthA++;
  10. // }
  11. // while (node2 != null) {
  12. // node2 = node2.next;
  13. // lengthB++;
  14. // }
  15. // node1 = headA;
  16. // node2 = headB;
  17. // if(lengthB > lengthA) {
  18. // // 交换长度
  19. // int temp = lengthA;
  20. // lengthA = lengthB;
  21. // lengthB = temp;
  22. // // 交换节点
  23. // ListNode tempNode = node2;
  24. // node2 = node1;
  25. // node1 = tempNode;
  26. // }
  27. // int gap = lengthA -lengthB;
  28. // while(gap-- > 0) {
  29. // node1 = node1.next;
  30. // }
  31. // while(node1 != null) {
  32. // if(node1 == node2) return node1;
  33. // node1 = node1.next;
  34. // node2 = node2.next;
  35. // }
  36. // return null;
  37. ListNode node1 = headA;
  38. ListNode node2 = headB;
  39. int lengthA = 0;
  40. int lengthB = 0;
  41. while (node1 != null) {
  42. node1 = node1.next;
  43. lengthA++;
  44. }
  45. while (node2 != null) {
  46. node2 = node2.next;
  47. lengthB++;
  48. }
  49. // 注意要重新把头节点赋给他
  50. node1 = headA;
  51. node2 = headB;
  52. int num = Math.abs(lengthA - lengthB);
  53. if (lengthA > lengthB) {
  54. while (num-- > 0) {
  55. node1 = node1.next;
  56. }
  57. } else {
  58. while (num-- > 0) {
  59. node2 = node2.next;
  60. }
  61. }
  62. while (node1 != null && node2 != null) {
  63. if (node1 != node2) {
  64. node1 = node1.next;
  65. node2 = node2.next;
  66. }else {
  67. return node1;
  68. }
  69. }
  70. return null;
  71. }
  72. }