leetcode206. Reverse Linked List/92. Reverse Linked List II
阿新 • • 發佈:2018-12-14
題目描述
反轉單鏈表
例子
Input: 1->2->3->4->5->NULL Output: 5->4->3->2->1->NULL
解法 easy題目,分為兩種解法:遞迴和非遞迴
解法1
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def reverseList(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if not head or not head.next:
return head
node = self.reverseList(head.next)
head.next.next = head
head.next = None
return node
解法2 非遞迴解法,定義兩個指標
class Solution(object):
def reverseList(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
pre = None
cur = head
while cur:
temp = cur.next
cur.next = pre
pre, cur = cur, temp
return pre
題目描述
反轉連結串列 - 從位置m到位置n
例子
Input: 1->2->3->4->5->NULL, m = 2, n = 4 Output: 1->4->3->2->5->NULL
思路 開始寫的時候發現很麻煩,好幾個特殊用例(比如m=1)要考慮。所以考慮加一個dummy結點。 把要翻轉的一段先進行翻轉,再把它和前後的連結串列接起來
解法
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def reverseBetween(self, head, m, n):
"""
:type head: ListNode
:type m: int
:type n: int
:rtype: ListNode
"""
dummy = ListNode(-1)
dummy.next = head
node = dummy
for _ in range(m-1):
node = node.next
pre = node.next
cur = pre.next
for _ in range(n-m):
temp = cur.next
cur.next = pre
pre, cur = cur, temp
# 先和後面串起來
node.next.next = cur
node.next = pre
return dummy.next