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以及链表定义见博文