题目描述:
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
看似是个很简单的题目,可以借用额外的存储空间,比如说可以使用栈来实现,正好先进后出。也可以直接算出反转后的位置交换。我们使用一种不需要额外存储空间的方法来实现,双指针。
其实也很简单嘛,就是改变了指针的方向了,然后让这样不就反过来了嘛
具体在实现时候,我们需要两个指针。一个指向第一个元素pre,一个指向当前元素cur。让pre指向cur元素,然后两个指针都向前移动。注意pre指针指向的丢失问题,所以要先存一下这个。
# 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:
cur = None
pre = head
while pre is not None:
t = pre.next
pre.next = cur
cur = pre
pre = t
return cur