1._237_删除链表中的节点
1.1链接
https://leetcode-cn.com/problems/delete-node-in-a-linked-list/
1.2题目描述
1.3代码实现
package 链表; /** * https://leetcode-cn.com/problems/delete-node-in-a-linked-list/ * @author MJ Lee * */ public class _237_删除链表中的节点 { public void deleteNode(ListNode node) { node.val = node.next.val; node.next = node.next.next; } }
2._206_反转链表
2.1链接
https://leetcode-cn.com/problems/reverse-linked-list/
2.2题目描述
2.3解决思路
2.3.1递归方式
代码实现
java版本
public ListNode reverseList(ListNode head) { if (head == null || head.next == null) return head; ListNode newHead = reverseList(head.next); head.next.next = head; head.next = null; return newHead; }
python版本
class Node(object): def __init__(self, value=None, next=None): self.value = value self.next = next ###递归方式 def reverse2(head): if head.next == None: # 递归停止的基线条件 return head new_head = reverse2(head.next) head.next.next = head # 当前层函数的head节点的后续节点指向当前head节点 head.next = None # 当前head节点指向None return new_head link = Node(1, Node(2, Node(3, Node(4, Node(5, Node(6, Node(7, Node(8, Node(9))))))))) root = reverse2(link) while root: print(root.value) root =root.next
2.3.2非递归方式
代码实现
java版本
public ListNode reverseList2(ListNode head) { if (head == null || head.next == null) return head; ListNode newHead = null; while (head != null) { //tmp的作用临时变了 保存变量值 防止节点引用断裂 从而被gc误删 ListNode tmp = head.next; head.next = newHead; newHead = head; head = tmp; } return newHead; }
python版本
class Node(object): def __init__(self, value=None, next=None): self.value = value self.next = next ###循环方式 def reverse(head): cur_node = head # 当前节点 new_link = None # 表示反转后的链表 while cur_node != None: tmp = cur_node.next # cur_node后续节点传递给中间变量 cur_node.next = new_link # cur_node指向new_link new_link = cur_node # 反转链表更新,cur_node为新的头结点 cur_node = tmp # 原链表节点后移一位 return new_link link = Node(1, Node(2, Node(3, Node(4, Node(5, Node(6, Node(7, Node(8, Node(9))))))))) root = reverse2(link) while root: print(root.value) root =root.next
3._141_环形链表
3.1链接
https://leetcode-cn.com/problems/linked-list-cycle/
3.2题目描述
3.3解决思路
快慢指针
3.4代码实现
java版本
public class _141_环形链表 { public boolean hasCycle(ListNode head) { if (head == null || head.next == null) return false; ListNode slow = head; ListNode fast = head.next; while (fast != null && fast.next != null) { slow = slow.next; fast = fast.next.next; if (slow == fast) return true; } return false; } }
4.约瑟夫问题
4.1链接
https://blog.csdn.net/weixin_38214171/article/details/80352921?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
4.2题目描述
4.3解决思路
用循环链表解决
4.4代码实现
java版本
static void josephus() { CircleLinkedList<Integer> list = new CircleLinkedList<>(); for (int i = 1; i <= 8; i++) { list.add(i); } // 指向头结点(指向1) list.reset(); while (!list.isEmpty()) { list.next(); list.next(); System.out.println(list.remove()); } }
X._XXX_
x.1链接
x.2题目描述
x.3解决思路
x.4代码实现
java版本
X._XXX_
x.1链接
x.2题目描述
x.3解决思路
x.4代码实现
java版本
X._XXX_
x.1链接
x.2题目描述
x.3解决思路
x.4代码实现
java版本
X._XXX_
x.1链接
x.2题目描述
x.3解决思路
x.4代码实现
java版本
X._XXX_
x.1链接
x.2题目描述
x.3解决思路
x.4代码实现
java版本
X._XXX_
x.1链接
x.2题目描述
x.3解决思路
x.4代码实现
java版本
X._XXX_
x.1链接
x.2题目描述
x.3解决思路
x.4代码实现
java版本
X._XXX_
x.1链接
x.2题目描述
x.3解决思路
x.4代码实现
java版本
X._XXX_
x.1链接
x.2题目描述
x.3解决思路
x.4代码实现
java版本
X._XXX_
x.1链接
x.2题目描述
x.3解决思路
x.4代码实现
java版本
X._XXX_
x.1链接
x.2题目描述
x.3解决思路
x.4代码实现
java版本
public boolean hasCycle(ListNode head) { if (head == null || head.next == null) return false; ListNode slow = head; ListNode fast = head.next; while (fast != null && fast.next != null) { slow = slow.next; fast = fast.next.next; if (slow == fast) return true; } return false; }