Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
75 lines (73 sloc) 1.69 KB
/*
* @lc app=leetcode.cn id=876 lang=cpp
*
* [876] 链表的中间结点
*
* https://leetcode-cn.com/problems/middle-of-the-linked-list/description/
*
* algorithms
* Easy (57.51%)
* Total Accepted: 7.7K
* Total Submissions: 13.2K
* Testcase Example: '[1,2,3,4,5]'
*
* 给定一个带有头结点 head 的非空单链表,返回链表的中间结点。
*
* 如果有两个中间结点,则返回第二个中间结点。
*
*
*
* 示例 1:
*
* 输入:[1,2,3,4,5]
* 输出:此列表中的结点 3 (序列化形式:[3,4,5])
* 返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。
* 注意,我们返回了一个 ListNode 类型的对象 ans,这样:
* ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next
* = NULL.
*
*
* 示例 2:
*
* 输入:[1,2,3,4,5,6]
* 输出:此列表中的结点 4 (序列化形式:[4,5,6])
* 由于该列表有两个中间结点,值分别为 3 和 4,我们返回第二个结点。
*
*
*
*
* 提示:
*
*
* 给定链表的结点数介于 1 和 100 之间。
*
*
*/
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
//快慢指针。链表。
class Solution {
public:
ListNode* middleNode(ListNode* head) {
ListNode* p1 = head;
ListNode* p2 = head;
while (p1)
{
if(p1->next)
p1 = p1->next->next;//1.不能用p++,链表不是物理存储的
//2.member access within null pointer of type 'struct ListNode,需要判空
else
{
break;//2.p1已经是尾节点,就跳出
}
p2 = p2->next;
}
return p2;
}
};
You can’t perform that action at this time.