206. 反转链表
方法一:递归算法
首先,考虑特殊情况,链表为空或者只有一个节点的情况;
其次,将头节点移至最后,作为最后一个节点,只需要把剩余节点反转好之后,指向曾经的头节点就好。剩余节点的反转同样如此实现,调用自己实现递归。注意,函数返回的是链表头,要用链表尾指向原来的头结点。
方法二:迭代算法
首先,考虑特殊情况,链表为空或者只有一个节点的情况;
其次,将头节点作为尾节点后,找第二个节点指向尾节点,再找第三个节点指向次尾节点…依次类推,直到遍历到真正的尾节点停止。注意终止条件。cur是旧链表从前往后,pre是新链表从后往前。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
'''
#方法一:递归算法
if not head or not head.next: #python 中指向空 表示None
return head
p = self.reverseList(head.next) #返回已经反转好的链表的头部
head.next.next = head
head.next = None
return p
'''
#方法二:迭代方法
if not head or not head.next:
return head
pre = None # 申请两个节点,pre和 cur,pre指向None
cur = head
while cur:
tmp = cur.next # 记录当前节点的下一个节点
cur.next = pre # 然后将当前节点指向pre
pre = cur # pre节点向前一位,cur节点向后一位
cur = tmp
return pre
用于自己梳理的啊~
大多参考题解~