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

启发和联系

注意含有奇数个、偶数个、一个元素时,代码是否具有普适性