首页 > 其他分享 >Day3 链表的一些基本练习

Day3 链表的一些基本练习

时间:2023-10-17 20:44:46浏览次数:39  
标签:ListNode cur val int 练习 Day3 next 链表 temp

Day3 链表的基础练习

最基本的删除节点 Lc203 
我习惯的还是弄一个新的dummyhead,然后如果是要找的节点,就删除,删除完记得delete。
//代码没什么好看的,主要就是熟悉链表的写法
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        ListNode *dummyHead= new ListNode(0);
        dummyHead->next=head;
        ListNode *cur =dummyHead;
        while(cur->next!= NULL){
            if(cur->next->val == val){
                ListNode *temp=cur ->next;
                cur->next=cur->next->next;
                delete temp;
            }else {
                cur=cur->next;
            }
        }
        head=dummyHead->next;
        delete dummyHead;
        return head;
    }
};
链表的基础操作练习Lc 707
没什么好说的 唯手熟尔
class MyLinkedList {
public:
struct LinkedNode {
        int val;
        LinkedNode* next;
        LinkedNode(int val):val(val), next(nullptr){}
    };
    MyLinkedList() {
        _dummyHead=new LinkedNode(0);
        _size=0;
    }
    
    int get(int index) {
        if(index>(_size-1)||index<0){
            return -1;
        }
        LinkedNode *cur=_dummyHead->next;
        while(index--){
            cur=cur->next;
        }
        return cur->val;
    }
    //头插法
    void addAtHead(int val) {
        LinkedNode* newNode= new LinkedNode(val);
        newNode->next=_dummyHead->next;
        _dummyHead->next=newNode;
        _size++;
    }
    //尾插法
    void addAtTail(int val) {
        LinkedNode* newNode= new LinkedNode(val);
        LinkedNode* cur=_dummyHead;
        while(cur->next){
            cur=cur->next;
        }
        cur->next=newNode;
        _size++;
    }
    
    void addAtIndex(int index, int val) {
        if(index>_size) return;
        if(index<0) index=0;
        LinkedNode *newNode=new LinkedNode(val);
        LinkedNode *cur=_dummyHead;
        while(index--){
            cur=cur->next;
        }
        newNode->next=cur->next;
        cur->next=newNode;
        _size++;
    }
    
    void deleteAtIndex(int index) {
        if(index >= _size || index <0 ){
            return;
        }
        LinkedNode *cur=_dummyHead;
        while(index--){
            cur=cur->next;
        }
        LinkedNode *temp=cur->next;
        cur->next=temp->next;
        delete temp;
        temp=nullptr;//防止temp变成野指针
        _size--;
    }
    private:
    int _size;
    LinkedNode* _dummyHead;
};
反转链表,可以好好练习一下,Lc206
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode *cur=head;
        ListNode *pre=NULL;
        ListNode *temp;
        while(cur){
            temp=cur->next;
            cur->next=pre;
            pre=cur;
            cur=temp;
        }
        return pre;
    }
};
//递归的写法可以对照下面的双指针写法,然后一一对应就行了
class Solution {
public:
    ListNode* reverse(ListNode*pre,ListNode* cur){
        if(cur==NULL) return pre;
        ListNode *temp;
        temp=cur->next;
        cur->next=pre;
        return reverse(cur,temp);
    }
    ListNode* reverseList(ListNode* head){
        return reverse(NULL,head);
    }
};

标签:ListNode,cur,val,int,练习,Day3,next,链表,temp
From: https://www.cnblogs.com/fancele/p/17770622.html

相关文章

  • Leetcode206. 反转链表
    题目描述给你单链表的头节点head,请你反转链表,并返回反转后的链表。示例提交的代码classSolution{publicListNoderesultHead;publicListNodereverseList(ListNodehead){if(head==null)returnnull;ListNodefirst=recursionOfList(he......
  • java链表详解 理论+代码+图示
    1、定义链表是一种物理存储结构上非连续存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的。(即链表是一个个节点组成的,这些节点物理上不连续,但逻辑上连续)一个节点就是一个Node对象。2、链表结构单向、双向;带头、不带头;循环、非循环; 以上情况组......
  • python练习.8
    问:用户给了一串带有逗号的数字,要求用逗号分隔数字列表,并生成列表和元组。例:23,34,43,44,5,5==》['23','34','43','44','5','5']   ('23','34','43','44','5','5')defAyue():......
  • python练习.5
    问:计算并输出100-200不能被三整除的整数的和voidtest1(){ intarr[10]={2,3,1,4,5,7,6,8,9,10}; intsi=sizeof(arr)/sizeof(arr[0]); qsort(arr,si,sizeof(arr[0]),ayue2); qsort(arr,si,sizeof(arr[0]),ayue3); inti=0; for(i=0;i<si;i++)......
  • 请在课上练习的基础上,实现输出加减法混合的运算题目列表。请提交代码及运行效果截图。
    importjava.util.Random;publicclassMathOperationGenerator{  publicstaticvoidmain(String[]args){    intnumberOfQuestions=10;//指定生成题目的数量    generateMathQuestions(numberOfQuestions);  }  publicstaticvoidgenerateMat......
  • python练习.4
    问:从键盘输入十个数,统计非负数字的个数和非负数字的和defAyue():arr=[]i=0my_sum=0my_num=0whilei<10:x=int(input("请输入你要统计的数字:"))if(x>=0):arr.append(x)my_sum+=1my......
  • python练习.3
    问:已知abc都是一位数,求当三位数abc加上cba的和为1333时,abc分别的值defAyue():forainrange(10):forbinrange(10):forcinrange(10):ifa*100+b*10+c+c*100+b*10+a==1333:print(a,b,c)print(Ayue(......
  • python练习.2
    问:求n以内最大的,能被17整除的数.defAyue():a=[]x=int(input("请输入你要测试的数:"))foriinrange(1,x):ifi%17==0:a.append(i)print(f"在1~{x}中的数字能被17整除的数为:{i}")print(a)print(Ayue())......
  • Leetcode707. 设计链表
    题目描述你可以选择使用单链表或者双链表,设计并实现自己的链表。单链表中的节点应该具备两个属性:val和next。val是当前节点的值,next是指向下一个节点的指针/引用。如果是双向链表,则还需要属性prev以指示链表中的上一个节点。假设链表中的所有节点下标从0开始。实现M......
  • 代码随想训练营第三天(Python) | 203.移除链表元素、707.设计链表、206.反转链表
    一、203.移除链表元素关键点:如何删除节点,需要知道删除节点前的节点。1、无虚拟头节点的方法classSolution:defremoveElements(self,head:Optional[ListNode],val:int)->Optional[ListNode]:whilehead!=Noneandhead.val==val:#如果头节点的值......