mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-11 04:54:51 +08:00
Merge pull request #157 from liuzhen0704/patch-2
添加 面试题02.07.链表相交 Java 版本
This commit is contained in:
@ -92,7 +92,63 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
Java:
|
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:
|
Python:
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user