leetCode第876题<最简单的解法,最容易的解法>
首先,题目是:
876. 链表的中间结点
要求:给定一个带有头结点 head 的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
示例:输入:[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.
首先我想到的方法是先有一个循环遍历得出链表节点的个数n,然后再判断是技术还是偶数,如果是偶数就输出n/2+1个节点以后的内容,如果是基数的话就输出n/2个节点以后的内容;但是请注意
它这个题目说的是有头节点,但其实是没有头节点的。也就是head节点存了第一个值。因此可以推出
/**
-
Definition for singly-linked list.
-
struct ListNode {
-
int val;
-
ListNode *next;
-
ListNode(int x) : val(x), next(NULL) {}
-
};
/
/* -
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* p = head;
ListNode* phead = NULL;
int size = 0;
while(p) //遍历得出链表元素的个数size
{
size++;
p = p->next;
}
int val = 0;if(size>1) //如果size == 1则直接返回整个链表即可,因此需要判断size是否等1
{
int k = size/2; //无论是偶数还是基数链表,返回值都是k为起始
while(head)
{
val++;
head = head->next;
if(k == val)
{
return head;
}
}
}
else
{
return head;
}return 0;
}
};
浙公网安备 33010602011771号