Leetcode 206.反转链表
1 题目描述(Leetcode题目链接)
反转一个单链表。
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
2 题解
新建一个链表,头插法插入节点。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
dummy = ListNode(0)
while head:
temp = head.next
head.next = dummy.next
dummy.next = head
head = temp
return dummy.next
利用python多元赋值的特性可以写出很简洁的代码。
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
retv = None
while head:
retv, retv.next, head = head, retv, head.next
return retv
递归方法如下。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
if not head or not head.next:
return head
p = self.reverseList(head.next)
head.next.next = head
head.next = None
return p