6/11, LinkedList 杂题
6/11, LinkedList 杂题
最早听到这题还是夏天实习吃饭的时候,现在也不知道那哥们都在忙啥。
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
int lenA = 0;
int lenB = 0;
ListNode ptrA = headA;
ListNode ptrB = headB;
while(ptrA != null){
ptrA = ptrA.next;
lenA ++;
}
while(ptrB != null){
ptrB = ptrB.next;
lenB ++;
}
ptrA = headA;
ptrB = headB;
if(lenA > lenB){
for(int i = 0; i < lenA - lenB; i++){
ptrA = ptrA.next;
}
} else {
for(int i = 0; i < lenB - lenA; i++){
ptrB = ptrB.next;
}
}
while(ptrA != ptrB){
ptrA = ptrA.next;
ptrB = ptrB.next;
}
return ptrA;
}
}O(n) 时间,O(1) 空间。好久不写链表了,感觉写的有点粗糙。。
用都指向 head 的快慢指针可以判断链表长度奇偶,最后 fast == null 的时候为偶,slow 指向后半单第一个节点;fast.next == null 的时候链表长度为奇数,slow 指向中间节点。
能这样 30秒 AC 的良心水题,已经不多了=。=
40 秒能 AC 的良心水题,也不多啊!
在 LeetCode 早期年代,这样的题居然可以算成 Hard 难度。。
拼接链表,认准多个 dummy node.
一开始想复杂了,还挑着拆成两个 list .. 其实就是注意下存中间两个 node,还有这两个 node 的 prev 与 next,循环解决就行。
Last updated
Was this helpful?