题目:206. 反转链表
题解: 待补充
时间复杂度: O(n)
空间复杂度: O(1)
代码实现:
# 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: Optional[ListNode]) -> Optional[ListNode]:
pre = None
cur = head
while cur:
nxt = cur.next
cur.next = pre
pre = cur
cur = nxt
return pre
题目:92. 反转链表 II
题解: 待补充
时间复杂度: O(n)
空间复杂度: O(1)
代码实现:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def reverseBetween(self, head: Optional[ListNode], left: int, right: int) -> Optional[ListNode]:
dummy = p0 = ListNode(next=head)
for _ in range(left - 1):
p0 = p0.next
pre = None
cur = p0.next
for _ in range(right - left + 1):
nxt = cur.next
cur.next = pre
pre = cur
cur = nxt
p0.next.next = cur
p0.next = pre
return dummy.next
题解: 待补充
时间复杂度: O(n)
空间复杂度: O(1)
代码实现:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
# 节点数
cnt = 0
cur = head
while cur:
cnt += 1
cur = cur.next
dummy = p0 = ListNode(next=head)
pre = None
cur = p0.next
while cnt >= k:
cnt -= k
# pre = None
# cur = p0.next
for _ in range(k):
nxt = cur.next
cur.next = pre
pre = cur
cur = nxt
nxt = p0.next
p0.next.next = cur
p0.next = pre
p0 = nxt
return dummy.next
题解: 待补充
时间复杂度: O(n)
空间复杂度: O(1)
代码实现:
# 方法一:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
if head == None or head.next == None:
return head
n = 0
cur = head
while cur:
n += 1
cur = cur.next
dummy = p0 = ListNode(next=head)
pre = None
cur = p0.next
while n >= 2:
n -= 2
for _ in range(2):
nxt = cur.next
cur.next = pre
pre = cur
cur = nxt
nxt = p0.next
p0.next.next = cur
p0.next = pre
p0 = nxt
return dummy.next
# 方法二:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
node0 = dummy = ListNode(next=head)
node1 = head
while node1 and node1.next:
node2 = node1.next
node3 = node2.next
node0.next = node2
node2.next = node1
node1.next = node3
node0 = node1
node1 = node3
return dummy.next