题目在这:https://leetcode-cn.com/problems/reverse-linked-list/
法一:(新建链表法)
思路分析
直接将链表里的值放到数组里,然后翻转数组,然后再吧数组变成一个新链表即可。
在建立新链表的时候。只能一个节点一个节点造。所以要判断是不是到了数组最后一个数,是的话就不用再造新节点了。
完整代码
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
if not head or not head.next:
return head
res = []
while head:
res.append(head.val)
head = head.next
res = res[::-1]
ans = ListNode() # 造新节点
p = ans
for i in range(len(res)):
ans.val = res[i]
if len(res) - 1 == i: # 判断是不是到了数组最后一个数
break
ans.next = ListNode() # 造新节点
ans = ans.next
return p
法二: (原地翻转)
思路分析
原地翻转其实就是翻转所有节点的next的指针指向。
看图应该秒懂了吧。
我们只需要设置开始的指针:pre = None ; cur = head
然后俩指针无脑往后移就行,
当cur指向空时,
最后返回pre即可
完整代码:
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
if not head or not head.next:
return head
pre = None
cur = head
while cur:
temp = cur.next
cur.next = pre
pre = cur
cur = temp
return pre