欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

876. 链表的中间结点

程序员文章站 2022-04-24 16:22:19
...

#876. 链表的中间结点

今天摸鱼了一天啥也没干,到了晚上抱着愧疚的心理打开了力扣,准备把每日一题刷了就去睡觉。没想到今天的题好简单啊,实在是太简单了,居然一遍过,感觉就是数据结构里超级基础的内容。
题目描述
876. 链表的中间结点
解题思路
1、单指针遍历链表
这个根本不需要什么思路嘛,大概就是先遍历一遍找出链表长度,然后返回中间的节点。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public ListNode middleNode(ListNode head) {        
	ListNode p = head;         
	int n = 1;         
	while(p.next != null) {             
		++n;             
		p = p.next;         
	}         
	p = head;         
	for (int i = 1; i < n/2 + 1; i++) {            
		p = p.next;        
		}         
	return p;
    }

2、快慢指针法
又是上次学到的新知识呢!但是我完全没想到,看评论之后发现的。思路就是一个慢指针,一个快指针,快指针的速度是慢指针的两倍,这样当快指针遍历到末尾的时候,慢指针一定在链表中间。

public ListNode middleNode1(ListNode head) {
	ListNode fast,slow;
   	fast = slow = head;
   	while (fast != null && fast.next != null) {
   		slow = slow.next;
   		fast = fast.next.next;
  	}
   return slow;
}
相关标签: 力扣刷题笔记