代码随想录训练营第III期–003–python
今天主要是链表相关,涉及具体题目如下所示:
# 203.移除链表元素
class Solution:
def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
cur = ListNode(-1, head)
ans = cur
while cur.next:
if cur.next.val != val:
cur = cur.next
else:
cur.next = cur.next.next# 这一行是cur.next,表示的是cur的下一个位置
return ans.next
# 707.设计链表
class MyLinkedList:
def __init__(self):
self.item = list()
def get(self, index: int) -> int:
if index < len(self.item):
return self.item[index]
else:
return -1
def addAtHead(self, val: int) -> None:
head = [val]
self.item = head + self.item
def addAtTail(self, val: int) -> None:
tail = [val]
self.item += tail
def addAtIndex(self, index: int, val: int) -> None:
if index < len(self.item):
left = self.item[:index]
right = self.item[index:]
self.item = left + [val] + right
elif index == len(self.item):# 这个需要注意一下,非法的index是无法添加的
self.addAtTail(val)
def deleteAtIndex(self, index: int) -> None:
if index < len(self.item):
self.item.pop(index)
# 206.反转链表
class Solution:
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
pre = None
cur = head
while cur:
temp = cur.next # reserve the next listnode
cur.next = pre # reverse the direction
# renew the pointers
pre = cur
cur = temp
return pre