# Definition for singly-linked list.# class ListNode(object):# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclassSolution(object):defremoveElements(self, head, val):"""
:type head: ListNode
:type val: int
:rtype: ListNode
"""
dummy = ListNode(0, head)
pre = dummy
cur = head
while(cur):if cur.val == val:
pre.next= cur.nextelse:
pre = pre.next
cur = cur.nextreturn dummy.next
707. 设计链表
主要思路还是在于记录哑节点,来方便后续的增加和删除节点操作
classListNode():def__init__(self, val,next=None):
self.val = val
self.next=nextclassMyLinkedList(object):def__init__(self):
self.dummy = ListNode(0)
self.size =0defget(self, index):"""
:type index: int
:rtype: int
"""if index <0or index >=self.size:return-1
cur = self.dummy.nextfor i inrange(index):
cur = cur.nextreturn cur.val
defaddAtHead(self, val):"""
:type val: int
:rtype: None
"""
self.dummy.next= ListNode(val, self.dummy.next)
self.size +=1defaddAtTail(self, val):"""
:type val: int
:rtype: None
"""
self.addAtIndex(self.size, val)# addAtIndex加过self.size了,因此size不用+1了defaddAtIndex(self, index, val):"""
:type index: int
:type val: int
:rtype: None
"""if index > self.size or index <0:return
pre = self.dummy
for i inrange(index):
pre = pre.next
pre.next= ListNode(val, pre.next)
self.size +=1defdeleteAtIndex(self, index):"""
:type index: int
:rtype: None
"""if index <0or index >=self.size:return
pre = self.dummy
for i inrange(index):
pre = pre.next
pre.next= pre.next.next
self.size -=1
206. 反转链表
一次面试的时候被问过,应该是想放水让我过的吧,但是我没做出来啊阿啊阿
但这个递归法,还是,有点离谱了。甚至加大了空间复杂度,O(n)
# Definition for singly-linked list.# class ListNode(object):# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclassSolution(object):defreverseList(self, head):"""
:type head: ListNode
:rtype: ListNode
"""# 反转curr, pre, next
curr = head
pre =None# 用来存储前一个while(curr):
tmp = curr.next# 用来暂时存储下一个
curr.next= pre
pre = curr
curr = tmp
return pre
# 递归的话return self.reverse(head,None)# 递归法defreverse(self, cur, pre):if cur =None:return pre
tmp = cur.next
cur.next= pre
return self.reverse(temp, cur)