反转链表(递归)
摘要:我的方法:迭代 class Solution { public ListNode reverseList(ListNode head) { if(head==null) return null; if(head.next==null) return head; ListNode pos=head.n
阅读全文
链表双指针总结
摘要:// 初始化 快指针和慢指针 ListNode slow = head; ListNode fast = head; /** * Change this condition to fit specific problem. * 在这里避免空指针错误 **/ while (slow != null &
阅读全文
删除链表的倒数第N个节点(头部加一个哑结点)
摘要:我的代码:测试用例【1,2】2, 时会报错,无法不能删除第一个指针 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { v
阅读全文
相交链表
摘要:方法一: 暴力法 遍历A中每个节点,看看B中有没有 public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { if (headA==null||headB==null)
阅读全文
环形链表(找到入口)(弗洛伊德算法)
摘要:第一阶段:判断是否有环 第二阶段:判断入环口在哪里 /** * 双指针 时间复杂度 O(n) 空间复杂度 O(1) * * 先用双指针法判断链表是否有环,若有则返回第一次相遇的节点 * * 第一次相遇时,假设【慢指针】 slow 走了 k 步,那么快指针 fast 一定走了 2k 步, * 也就是说
阅读全文
环形链表(快慢指针)
摘要:如果列表中不存在环,最终快指针将会最先到达尾部,此时我们可以返回 false public boolean hasCycle(ListNode head) { if (head == null || head.next == null) { return false; } ListNode slow
阅读全文
哈希表-环形链表
摘要:public boolean hasCycle(ListNode head) { Set<ListNode> nodesSeen = new HashSet<>(); while (head != null) { if (nodesSeen.contains(head)) { return true
阅读全文
双链表
摘要:通过比较 index 和 size - index 的大小判断从头开始较快还是从尾巴开始较快 public class ListNode { int val; ListNode next; ListNode prev; ListNode(int x) { val = x; } //这个只是用来初始化
阅读全文
单向列表(有哨兵结点)
摘要:在链表类中实现这些功能: get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。addAtTail(val):将值为 val 的节点追加到链表的最后
阅读全文