# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclassSolution:defremoveElements(self, head: Optional[ListNode], val:int)-> Optional[ListNode]:
virtualHead = ListNode()# 申请虚拟节点
virtualHead.next= head # 虚拟节点指向head
cur = virtualHead
while cur.next:if cur.next.val == val:
cur.next= cur.next.next# 删除节点else:
cur = cur.nextreturn virtualHead.next
设计链表
https://leetcode.cn/problems/design-linked-list/
get(index):获取链表中下标为index的值。
addAtHead(val):头部插入元素
addAtTail(val):尾部插入元素
addAtIndex(index,val):将节点插入到下标为index的位置
deleteAtIndex(index):删除下标为index的节点
思路
采用虚拟头结点
classListNode:def__init__(self, val=0,next=None):
self.val = val
self.next=nextclassMyLinkedList:def__init__(self):
self.virtualHead = ListNode()
self.size =0defget(self, index:int)->int:if index <0or index > self.size -1:return-1
cur = self.virtualHead.nextfor _ inrange(index):
cur = cur.nextreturn cur.val
defaddAtHead(self, val:int)->None:
tempNode = ListNode(val)
tempNode.next= self.virtualHead.next
self.virtualHead.next= tempNode
self.size +=1defaddAtTail(self, val:int)->None:
tempNode = ListNode(val)
cur = self.virtualHead # 注意:没有节点时,尾部插入也可以是头部插入while cur.next:
cur = cur.next
cur.next= tempNode
self.size +=1defaddAtIndex(self, index:int, val:int)->None:if index <0or index > self.size:# 注意:最后一个节点的位置的下一个节点插入也是可以的returnNone
tempNode = ListNode(val)
cur = self.virtualHead # 有可能在头结点的位置插入for _ inrange(index):
cur = cur.next
tempNode.next= cur.next
cur.next= tempNode
self.size +=1defdeleteAtIndex(self, index:int)->None:if index <0or index > self.size -1:returnNone
cur = self.virtualHead # 有可能删除头结点for _ inrange(index):
cur = cur.next
cur.next= cur.next.next
self.size -=1# Your MyLinkedList object will be instantiated and called as such:# obj = MyLinkedList()# param_1 = obj.get(index)# obj.addAtHead(val)# obj.addAtTail(val)# obj.addAtIndex(index,val)# obj.deleteAtIndex(index)
翻转链表
https://leetcode.cn/problems/reverse-linked-list/
思路
使用双指针,初始时,cur指向头节点,pre指向None
在移动cur,pre之前,先记录cur的下一个节点
在移动cur,pre时,先移动pre,再移动cur
# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclassSolution:defreverseList(self, head: Optional[ListNode])-> Optional[ListNode]:
cur = head
pre =Nonewhile cur:
temp = cur.next
cur.next= pre
pre = cur
cur = temp
return pre