给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点(Java实现)
程序员文章站
2022-07-10 20:30:47
...
public class LinkedList {
//给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点
class ListNode {
int val;
ListNode next = null;
ListNode(int x) {
val = x;
}
}
//数学法
public ListNode middleNode(ListNode head) {
//判断非法情况
if (head == null) {
return null;
}
if (head.next == null) {
return head;
}
//中间节点即为移动 size / 2 次所指的节点
int steps = gitSize(head) / 2;
ListNode prev = head;
for (int i = 0; i < steps; i++) {
prev = prev.next;
}
return prev;
}
private int gitSize (ListNode head) {
int size = 0;
ListNode cur = head;
while (cur != null) {
size++;
cur = cur.next;
}
return size;
}
//快慢指针法
public ListNode middleNode2(ListNode head) {
//判断非法情况
if (head == null) {
return null;
}
if (head.next == null) {
return head;
}
//创建 fast 和 slow 两个指针, fast 指针速度是 slow 的 2 倍,当 fast 访问到尾部时. slow 刚好走到一半
ListNode fast = head;
ListNode slow = head;
while (fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
}
return slow;
}
}
上一篇: 关于多图片上传
下一篇: 调试中出现的问题(一)
推荐阅读
-
给定一个带有头结点 head 的非空单链表,返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。
-
给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点(Java实现)
-
给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点
-
Leetcode题库:给定一个带有头结点 head 的非空单链表,返回链表的中间结点,如果有两个中间节点则返回第二个
-
常见单链表题型(三) 给定一个带有头结点 head 的非空单链表,返回链表的中间结点;如果有两个中间结点,则返回第二个中间结点
-
给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。
-
给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点
-
Java:给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点
-
给定一个头结点为 head 的非空单链表,返回链表的中间结点,如果有两个中间结点,则返回第二个中间结点。
-
【Java】数据结构——(OJ题)给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点