203. 移除链表元素
第一想法:设置虚拟头结点,如果链表中的值与val的值相等,则删除该元素,并向后移动指针
学习链接:代码随想录
错误点:代码只写了与val 相等的情况,而没有考虑与val不相等的情况,这里的else的考虑很重要
class Solution:
def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
pre = ListNode(next = head)
res = pre
cur = pre.next
while cur:
if cur.val == val:
pre.next = cur.next
cur = pre.next
else:
pre = pre.next
cur = cur.next
return res.next
707.设计链表 (空)
206.反转链表
第一想法:设置一个pre指向空,然后让head指向pre,pre指向head。head指向下一个
学习链接:代码随想录
class Solution:
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
# pre = ListNode(None)
pre = None
cur = head
while head:
temp = head.next
head.next = pre
pre = head
head = temp
return pre
学习后想法:递归
class Solution:
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
#迭代法
# pre = None
# cur = head
# while cur:
# temp = cur.next
# cur.next = pre
# pre = cur
# cur = temp
# return pre
# 递归法(周日补)
def dfs(pre,cur):
if not cur:
return pre
temp = cur.next
cur.next = pre
return dfs(cur,temp)
return dfs(None,head)