Q1: 203. Remove Linked List Elements
class Solution:
def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
dummy = ListNode(0)
dummy.next = head
cur = dummy
while cur != None and cur.next != None:
if cur.next.val == val:
cur.next = cur.next.next
else:
cur = cur.next
return dummy.next
5min;很简单的题
Q2: 707. Design Linked List
class Node:
def __init__(self):
self.val = 0
self.next = None
def __init__(self,val):
self.val = val
self.next = None
class MyLinkedList:
def __init__(self):
self.size = 0
self.head = None
def printL(self):
cur = self.head
print('size', self.size)
for i in range(self.size):
print(cur.val,i)
cur = cur.next
print('end')
def get(self, index: int) -> int:
if index >= self.size:
return -1
cur = self.head
for i in range(index):
cur = cur.next
return cur.val
def addAtHead(self, val: int) -> None:
node = Node(val)
node.next = self.head
self.head = node
self.size += 1
return
def addAtTail(self, val: int) -> None:
if self.head == None:
self.head = Node(val)
else:
cur = self.head
for i in range(self.size - 1):
cur = cur.next
cur.next = Node(val)
self.size += 1
return
def addAtIndex(self, index: int, val: int) -> None:
if index > self.size:
return
if index == 0:
self.addAtHead(val)
else:
cur = self.head
for i in range(index-1):
cur = cur.next
tmp = cur.next
cur.next = Node(val)
cur.next.next = tmp
self.size += 1
def deleteAtIndex(self, index: int) -> None:
if index >= self.size:
return
if index == 0:
self.head = self.head.next
else:
cur = self.head
for i in range(index-1):
cur = cur.next
cur.next = cur.next.next
self.size -= 1
return
30min; 记得检查head是否为None!以及插入的时候把后半段加上
Q3: 206. Reverse Linked List
class Solution:
def reverse(self,head, newhead):
if head == None:
return newhead
head1 = head.next
head.next = newhead
return self.reverse(head1, head)
# def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
# return self.reverse(head, None)
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
left,right = None, head
while right != None:
tmp = right.next
right.next = left
left = right
right = tmp
return left
15min; iterative 和 recursive两种方法。idea就是一个一个挪