206. Reverse Linked List

1. 原始题目

Reverse a singly linked list.

Example:

Input: 1->2->3->4->5->NULL
Output: 5->4->3->2->1->NULL

2. 题目理解

反转一个单链表

注意:空链表的处理,单个结点的处理

3. 解法

因为在反向指向结点的时候容易导致链表出现断裂,所以需3个结点保存当前结点,当前结点之前,之后的结点。

 1 # Definition for singly-linked list.
 2 # class ListNode:
 3 #     def __init__(self, x):
 4 #         self.val = x
 5 #         self.next = None
 6 
 7 class Solution:
 8     def reverseList(self, head: ListNode) -> ListNode:
 9         if not head:           # 空链表返回None
10             return None
11         if not head.next:      # 单结点返回当前结点
12             return head
13         
14         i = head               # 依次定义3个结点
15         j = i.next
16         k = j.next
17         i.next = None
18         while(j):
19             j.next = i
20             i = j
21             j = k
22             if k:
23                 k = k.next
24         return i

4. 验证结果

ss = Solution_reverse()
new_head = ss.reverseList(newlist.head)
newlist.print_node(new_head)

1 1 2 3 4 4
4 4 3 2 1 1

注:newlist以及链表定义见博文

原文地址:https://www.cnblogs.com/king-lps/p/10655141.html