第一题
代码
python版本
class MyLinkedList:
def __init__(self):
self.dummy = ListNode(-1)
self.size = 0
def get(self, index: int) -> int:
if index < 0 or index >= self.size:
return -1
cur = self.dummy.next
i = 0
while i < index:
cur = cur.next
i += 1
return cur.val
def addAtHead(self, val: int) -> None:
self.addAtIndex(0, val)
def addAtTail(self, val: int) -> None:
self.addAtIndex(self.size, val)
def addAtIndex(self, index: int, val: int) -> None:
if index < 0:
index = 0
elif index > self.size:
return
pre = self.dummy
i = 0
while i < index:
pre = pre.next
i += 1
pre.next = ListNode(val, pre.next)
self.size += 1
return
def deleteAtIndex(self, index: int) -> None:
if index < 0 or index >= self.size:
return
pre = self.dummy
i = 0
while i < index:
pre = pre.next
i += 1
pre.next = pre.next.next
self.size -= 1
return
第二题
代码
python版本
class Solution:
def middleNode(self, head: Optional[ListNode]) -> Optional[ListNode]:
slow = fast = head
while fast and fast.next:
fast = fast.next.next
slow = slow.next
return slow
第三题
代码
python版本
class Solution:
def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
dummy = ListNode(-1, head)
cur = dummy
while cur.next:
if cur.next.val == val:
cur.next = cur.next.next
else:
cur = cur.next
return dummy.next
第四题
83. 删除排序链表中的重复元素 - 力扣(LeetCode)
代码
python版本
class Solution:
def deleteDuplicates(self, head: Optional[ListNode]) -> Optional[ListNode]:
dummy = ListNode(-101, head)
cur = dummy
while cur.next:
if cur.val == cur.next.val:
cur.next = cur.next.next
else:
cur = cur.next
return dummy.next
第五题
19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)
代码
python版本
class Solution:
def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:
dummy = ListNode(-1, head)
slow = fast = dummy
i = 0
while i < n:
fast = fast.next
i += 1
while fast.next:
fast = fast.next
slow = slow.next
slow.next = slow.next.next
return dummy.next