876. 链表的中间结点
.
给定一个带有头结点 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,我们返回第二个结点
一道非常简单的链表题(有点过于简单了,,)开始的时候想的是先遍历一遍链表,得到链表的长度从而得到中值位置,然后再遍历到中止就可以了
代码如下:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def middleNode(self, head: ListNode) -> ListNode:
c=head
count=1
half=1
while(c.next!=None):
c=c.next
count=count+1
count=(count)//2+1
c=head
while(half!=count):
c=c.next
half=half+1
return c
后来改进的时候发现在第一遍遍历是可以用一个顺序表存进去,这样每个节点和他的位置就是一一对应的关系,不用第二次遍历就能提取中值了,不过这种方法要注意特殊值
代码如下:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def middleNode(self, head: ListNode) -> ListNode:
a=[]
if(head.next==None):
return head
while(head!=None):
a.append(head)
head=head.next
return a[(len(a))//2]
一道轻松的小题开启了繁忙的一天~