876. Middle of the Linked List

1. 原始题目

Given a non-empty, singly linked list with head node head, return a middle node of linked list.

If there are two middle nodes, return the second middle node.

 

Example 1:

Input: [1,2,3,4,5]
Output: Node 3 from this list (Serialization: [3,4,5])
The returned node has value 3.  (The judge's serialization of this node is [3,4,5]).
Note that we returned a ListNode object ans, such that:
ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, and ans.next.next.next = NULL.

Example 2:

Input: [1,2,3,4,5,6]
Output: Node 4 from this list (Serialization: [4,5,6])
Since the list has two middle nodes with values 3 and 4, we return the second one.

2. 题目理解

就是找到中间结点,然后依次打印链表结点。方法就是利用两个快慢指针。从头开始,如果快指针每次走两步,慢指针每次走一步,那么当快指针走到末尾时,慢指针正好在中间位置。

 

3. 解题

1 class Solution:
2     def middleNode(self, head: ListNode) -> ListNode:
3         pre = head   # 快指针
4         cur = head   # 慢指针
5         while(pre and pre.next):
6             cur = cur.next
7             pre = pre.next.next
8         
9         return cur

检验:

 1 # 新建链表1
 2 listnode1 = ListNode_handle(None)
 3 #s1 = [1,2,3,666,8,3,2,9,4,5,6,8,999,666]
 4 s1 = [1,3,5,666,4,5]
 5 for i in s1:
 6     listnode1.add(i)
 7 listnode1.print_node(listnode1.head)
 8 
 9 
10 s = Solution()
11 head = s.middleNode(listnode1.head)
12 listnode1.print_node(head)

1 3 5 666 4 5
666 4 5

 

posted @ 2019-04-05 16:34  三年一梦  阅读(421)  评论(0编辑  收藏  举报