Leetcode 链表
链表当中有相当一部分题目需要使用双指针的方式来进行解决,双指针标准Java代码:
ListNode fast = head, slow = head;
while (fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
// TODO
}
// TODO1、获取倒数第K个元素:快慢指针,fast先走K步,然后返回slow指针即可
2、获取中间位置的元素:快慢指针,返回slow
3、判断是否有环:快慢指针,先走,碰撞了之后返回true
4、寻找环入口,如果不存在就返回null
public ListNode detectCycle(ListNode head) {
ListNode fast = head, slow = head;
while (true) {
if (fast == null || fast.next == null) {
return null;
}
slow = slow.next;
fast = fast.next.next;
if (fast == slow) {
break;
}
}
fast = head;
while (fast != slow) {
fast = fast.next;
slow = slow.next;
}
return fast;
}5、找到相交链表
反转链表类,都只需要在外部定义pre和cur即可
6、反转链表
7、反转链表Ⅱ:反转left到right的元素【头插法来解决】
头插法关键代码:

最后更新于
这有帮助吗?
