Leetcode Link: 剑指 Offer II 024. 反转链表 - 力扣(LeetCode) (leetcode-cn.com) 剑指 Offer 24. 反转链表 - 力扣(LeetCode) 206. 反转链表 - 力扣(LeetCode)
题目
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表
解法一
思路:用栈解决,先进后出,把原来的链表的值放到栈里,在新建链表后一一取出来
题解:
# 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:
node_list = []
# 取出来所有值
while head:
node_list.append(head.val)
head = head.next
# 重新生成链表,并赋值为原链表最后一个节点的值
curNode = ListNode(val=node_list[-1])
node_list.pop()
head = curNode
for val in node_list[::-1]:
newNode = ListNode(val=val)
curNode.next = newNode
curNode = curNode.next
return head解法二
思路:使用lastNode, curNode, nextNode来回玩,稍微有点绕。
题解:
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
curNode = head
lastNode = None
while(curNode):
nextNode = curNode.next
curNode.next = lastNode
lastNode = curNode
curNode = nextNode
return lastNode # 注意这里的返回节点是last启发和联系
注意含有奇数个、偶数个、一个元素时,代码是否具有普适性