首页 > 其他分享 >Leetcode刷题第十五天-链表

Leetcode刷题第十五天-链表

时间:2024-02-29 15:22:04浏览次数:22  
标签:index head cur val self next 链表 第十五天 Leetcode

203:移除链表元素

链接:203. 移除链表元素 - 力扣(LeetCode)

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
        #虚拟头节点
        dummhead=ListNode(next = head)
        cur=dummhead
        while cur.next:
            if(cur.next.val==val):  cur.next=cur.next.next
            else:   cur=cur.next
        return dummhead.next
        '''
        #原链表删除
        #如果头节点等于val,删头节点,一直到头节点不是val
        while head and head.val==val:  head=head.next
        if not head :   return head
        cur=head
        while cur and cur.next:
            if(cur.next.val==val):  cur.next=cur.next.next
            else:   cur=cur.next
        return head
        '''
        
removeElements

707:设计链表

链接:707. 设计链表 - 力扣(LeetCode)

class ListNode:
    def __init__(self,val=0,next=None):
        self.val=val
        self.next=next
class MyLinkedList:
    
    def __init__(self):
        #虚拟头节点,链表长度为0
        self.dummyhead=ListNode()
        self.size=0

    def get(self, index: int) -> int:
        if index<0 or index >= self.size:  return -1
        cur=self.dummyhead.next
        for i in range(index):
            cur=cur.next
        return cur.val

    def addAtHead(self, val: int) -> None:
        self.dummyhead.next=ListNode(val,self.dummyhead.next)
        self.size+=1

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

    def addAtIndex(self, index: int, val: int) -> None:
        if index<0 or index > self.size:  return 
        cur=self.dummyhead
        for i in range(index):
            cur=cur.next
        cur.next=ListNode(val,cur.next)
        self.size+=1

    def deleteAtIndex(self, index: int) -> None:
        if index<0 or index>=self.size :    return
        cur=self.dummyhead
        for i in range(index):  cur=cur.next
        cur.next=cur.next.next
        self.size-=1

    def display(self):
        #返回一个list,便于debug
        cur=self.dummyhead
        re=[]
        while cur:
            re.append(cur.val)
            cur=cur.next
        return re


# 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)
MyLinkedList

206:反转链表

链接:206. 反转链表 - 力扣(LeetCode)

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        if not head:    return head
        pre,cur=None,head
        while cur:
            tmp=cur.next
            cur.next=pre
            pre,cur=cur,tmp
        return pre
reverseList

 

标签:index,head,cur,val,self,next,链表,第十五天,Leetcode
From: https://www.cnblogs.com/xiaoruru/p/18044346

相关文章

  • 【leetcode】412_FizzBuzz_C
    题目描述给你一个整数n,找出从1到n各个整数的FizzBuzz表示,并用字符串数组answer(下标从1开始)返回结果,其中:answer[i]=="FizzBuzz"如果i同时是3和5的倍数。answer[i]=="Fizz"如果i是3的倍数。answer[i]=="Buzz"如果i是5的倍数。answer[i]==......
  • 【C++】相对于数组,在链表中添加和删除元素更容易,但排序速度更慢。这就引出了一种可能
    相对于数组,在链表中添加和删除元素更容易,但排序速度更慢。这就引出了一种可能性:相对于使用链表算法进行排序,将链表复制到数组中,对数组进行排序,再将排序后的结果复制到链表中的速度可能更快;但这也可能占用更多的内存。请使用如下方法检验上述假设。a.创建大型vector<int>对象vi0,并......
  • 代码随想录算法训练营day08 | leetcode 344. 反转字符串、541. 反转字符串 II、54. 替
    目录题目链接:344.反转字符串-简单题目链接:541.反转字符串II-简单题目链接:[54.替换数字](题目页面(kamacoder.com))题目链接:151.反转字符串中的单词-中等题目链接:[55.右旋字符串](题目页面(kamacoder.com))题目链接:344.反转字符串-简单题目描述:编写一个函数,其作用是将......
  • 142. 环形链表 II C
    /***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNode*detectCycle(structListNode*head){if(!head||!head->next)returnNULL;structListNode*slow=head;s......
  • 面试题 02.07. 链表相交C
    利用链表的特性,如果相交的话,后面就不可能岔开!你可以想象把他们有同一个尾巴,然后从尾巴往前看。所以只要知道两个链表的长度,就可以在同一起跑线上一起比较了。/***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;......
  • 19. 删除链表的倒数第 N 个结点C
    /***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNode*removeNthFromEnd(structListNode*head,intn){if(!head)returnNULL;inti=0;structListNode*tem=head;......
  • 【力扣】奇偶链表
    题目描述思路我想起了一位故人。。前面那道分隔链表的题,只需要把<x的条件改为位置的奇偶即可完全照搬过来,出题人偷懒了属于是。试着不抄代码重新写一遍:简单写了一下发现这道题不太适合用递归算法求解,因为结点在整个链表中的位置不太好确认,试着用双指针法写一下:classSolut......
  • 203. 移除链表元素C
    写了个递归/***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNode*delect(structListNode*head,intx){if(!head)returnNULL;if(head->val==x){structListNode*......
  • leedcode 环形链表
    快慢指针:classSolution:defhasCycle(self,head:Optional[ListNode])->bool:#如果链表为空或者只有一个节点,肯定不存在环ifnotheadornothead.next:returnFalse#初始化慢指针和快指针slow=headf......
  • [LeetCode] 2583. Kth Largest Sum in a Binary Tree
    Youaregiventherootofabinarytreeandapositiveintegerk.Thelevelsuminthetreeisthesumofthevaluesofthenodesthatareonthesamelevel.Returnthekthlargestlevelsuminthetree(notnecessarilydistinct).Iftherearefewerthan......