反转链表
时间限制:1秒 空间限制:32768K 热度指数:450528
本题知识点: 链表
算法知识视频讲解
题目描述
输入一个链表,反转链表后,输出新链表的表头。
解析
思路很简单:1->2->3->4->5,遍历链表,把1的next置为None,2的next置为1,以此类推,5的next置为4。得到反转链表。需要考虑链表只有1个元素的情况。图中有具体的每步迭代的思路,最后输出pre而不是cur是因为最后一次迭代后cur已经指向None了,而pre是完整的反向链表。
代码
更新:2020年03月10日
非递归
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回ListNode
def ReverseList(self, pHead):
# write code here
if not pHead or not pHead.next: # 如果小于等于1个链表,则返回
return pHead
pre = None # 上一节点
next = None # 暂存节点
while pHead: # 当前节点
next = pHead.next # 将下一个节点暂存到变量next
pHead.next = pre # 当前节点的next指向上一个节点
pre = pHead # 上一个节点指针后移指向当前节点pHead
pHead = next # 当前节点指针后移指向下一个节点
return pre
递归
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回ListNode
def ReverseList(self, pHead):
# write code here
if not pHead or not pHead.next:
return pHead
new_Head = self.ReverseList(pHead.next)
pHead.next.next = pHead
pHead.next = None
return new_Head