问题描述
Reverse a singly linked list.
Example:
Input: 1->2->3->4->5->NULL
Output: 5->4->3->2->1->NULL
思路分析
有递归和非递归两种方法,递归算法可以去掉头结点然后反转子链表,然后把头结点插入到末尾;非递归算法则是遍历整个链表,把当前结点的 next 指向前一个结点即可。需要注意首位,首结点的 next 要设置为空,而尾结点要作为返回结点。
Python3 代码:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
p1, p2 = head, head and head.next # 初始化为第一个和第二个结点
if p1: p1.next=None
while p1 and p2:
tmp = p2.next
p2.next = p1
p1 = p2
p2 = tmp
return p1
#或者
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
prev, curr = None, head #初始化为空结点和当前结点
while curr:
tmp = curr.next
curr.next = prev
prev = curr
curr = tmp
return prev