leetcode录友打卡day3

203移除链表元素

 题目:给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回新的头节点 。

 思路:设置一个虚拟头节点,next指向head,然后再遍历链表,当遇到节点值=val时移除。

def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
        
        dummy = ListNode(next=head)
        cur =dummy
    
        while cur.next:
            if cur.next.val == val:
                cur.next = cur.next.next
            else:
                cur = cur.next
        return dummy.next

707设计链表

  • int get(int index) 获取链表中下标为 index 的节点的值。如果下标无效,则返回 -1 。
  • 思路:
  • 首先判断index的大小,排除大于链表长度和小于0的情况
  • 当index合理时,循环遍历链表至index
  • 返回所对应的值
def get(self, index: int) -> int:
        if index < 0 or index >= self.size:
            return -1
        
        current = self.dummy_head.next
        for i in range(index):
            current = current.next
            
        return current.val
  • void addAtHead(int val) 将一个值为 val 的节点插入到链表中第一个元素之前。在插入完成后,新节点会成为链表的第一个节点。
  • 思路:将该值视为新的头节点的值,指向原链表的头节点
  • def addAtHead(self, val: int) -> None:
            self.dummy_head.next = ListNode(val, self.dummy_head.next)
            self.size += 1

 

  • void addAtTail(int val) 将一个值为 val 的节点追加到链表中作为链表的最后一个元素。

 思路:cur遍历链表至最后,将cur.next指向该值所创建的链表

def addAtTail(self, val: int) -> None:
        cur = self.dummy_head
        while cur.next:
            cur = cur.next
        cur.next = ListNode(val)
        self.size += 1

 

  • void addAtIndex(int index, int val) 将一个值为 val 的节点插入到链表中下标为 index 的节点之前。如果 index 等于链表的长度,那么该节点会被追加到链表的末尾。如果 index 比长度更大,该节点将 不会插入 到链表中。

 思路:首先判断index的大小,不合理直接ruturn。遍历链表至index-1,插入该值。

def addAtIndex(self, index: int, val: int) -> None:
        if index < 0 or index > self.size:
            return

        cur = self.dummy_head
        for i in range(index):
            cur = cur.next

        cur.next = ListNode(val, cur.next)
        self.size += 1

 

  • void deleteAtIndex(int index) 如果下标有效,则删除链表中下标为 index 的节点。

 思路:首先判断index是否合理。遍历链表至index-1,删除后面的index节点。

def deleteAtIndex(self, index: int) -> None:
        if index < 0 or index >= self.size:
            return

        cur = self.dummy_head
        for i in range(index):
            cur = cur.next

        cur.next = cur.next.next
        self.size -= 1

 

206反转链表

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

思路1:递归。

def reverse(self,cur:ListNode,pre:ListNode)->ListNode:
        if cur==None:
            return pre
        
        temp = cur.next
        cur.next = pre
        return self.reverse(temp, cur)

def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        return self.reverse(head, None)
 

思路2:用cur遍历链表,将cur.next指向pre,并更新pre为cur。

def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        pre = None
        cur =head
        while cur:
            nxt = cur.next
            cur.next = pre
            pre = cur
            cur = nxt
        
        return pre

若有不足,还望各位大佬多多指教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值