mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 19:44:45 +08:00
Update 面试题02.07.链表相交 Java 版本
代码经过测试 beats 98% submission, 完全follow Carl's C++版本的全部逻辑,稍作修改并加上了注释!辛苦啦!谢谢
This commit is contained in:

committed by
GitHub

parent
919b4dbb9a
commit
dae5f4debe
@ -92,7 +92,63 @@ public:
|
||||
|
||||
|
||||
Java:
|
||||
```Java
|
||||
/**
|
||||
* Definition for singly-linked list.
|
||||
* public class ListNode {
|
||||
* int val;
|
||||
* ListNode next;
|
||||
* ListNode(int x) {
|
||||
* val = x;
|
||||
* next = null;
|
||||
* }
|
||||
* }
|
||||
*/
|
||||
public class Solution {
|
||||
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
|
||||
ListNode curA = headA;
|
||||
ListNode curB = headB;
|
||||
int lenA = 0, lenB = 0;
|
||||
while (curA != null) { // 求链表A的长度
|
||||
lenA++;
|
||||
curA = curA.next;
|
||||
}
|
||||
while (curB != null) { // 求链表B的长度
|
||||
lenB++;
|
||||
curB = curB.next;
|
||||
}
|
||||
curA = headA;
|
||||
curB = headB;
|
||||
// 让curA为最长链表的头,lenA为其长度
|
||||
if (lenB > lenA) {
|
||||
//1. swap (lenA, lenB);
|
||||
int tmpLen = lenA;
|
||||
lenA = lenB;
|
||||
lenB = tmpLen;
|
||||
//2. swap (curA, curB);
|
||||
ListNode tmpNode = curA;
|
||||
curA = curB;
|
||||
curB = tmpNode;
|
||||
}
|
||||
// 求长度差
|
||||
int gap = lenA - lenB;
|
||||
// 让curA和curB在同一起点上(末尾位置对齐)
|
||||
while (gap-- > 0) {
|
||||
curA = curA.next;
|
||||
}
|
||||
// 遍历curA 和 curB,遇到相同则直接返回
|
||||
while (curA != null) {
|
||||
if (curA == curB) {
|
||||
return curA;
|
||||
}
|
||||
curA = curA.next;
|
||||
curB = curB.next;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
Python:
|
||||
|
||||
|
Reference in New Issue
Block a user