public class ListNode {
int val;
ListNode next;
public ListNode(int val) {
this.val = val;
}
}
public class Solution {
//3.给定一个带有头结点head的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。
**//方式一:求链表长度的一半**
public ListNode middleNode(ListNode head) {
//得到链表的长度
int steps = size(head) / 2;
//根据长度的一半移动cur
ListNode cur = head;
for (int i = 0; i < steps; i++) {
cur = cur.next;
}
return cur;
}
//计算链表的长度
public int size(ListNode head){
int size = 0;
//遍历链表,获取长度
for (ListNode cur = head;cur != null;cur = cur.next) {
size++;
}
return size;
}
**方式二:快慢指针的方法:快指针一次走两步,慢指针一次走一步**
public ListNode middleNode1(ListNode head) {
ListNode fast = head;
ListNode slow = head;
while (fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
}
return slow;
}
}
java:返回单链表的中间节点
最新推荐文章于 2023-04-27 23:05:00 发布