203.移除链表元素
class Solution:
def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
dummy_head = ListNode(next = head)
cur = dummy_head
while cur.next != None:
if cur.next.val == val:
cur.next = cur.next.next
else:
cur = cur.next
return dummy_head.next
第一次用python写 还是比较舒服的 非常简洁 这个还比较简单
206.反转链表
(1)双指针
class Solution:
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
pre = None
cur = head
while cur != None:
tmp = cur.next
cur.next = pre
pre = cur
cur = tmp
return pre
用pre指针指向前一个结点 cur指向当前节点 先用tmp变量存cur的下一个节点 然后让cur指向pre 再向后移 pre = cur cur = tmp 最后返回pre(头结点)
(2)递归
class Solution:
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
def reverse(pre, cur):
if not cur:
return pre # 终止条件 到最后一个了 返回头节点
tmp = cur.next
cur.next = pre
return reverse(cur, tmp)
# pre = cur
# cur = tmp
return reverse(None, head)
# pre = None
# cur = head
和双指针思路类似 但还是没那么好理解