Coding Caprice - Linked-List 1

203. 移除链表元素

cpp 复制代码
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        ListNode* Head = new ListNode();
        Head->next = head;
        ListNode* out1 = Head;
        while(Head!=nullptr && Head->next!=nullptr){
            if(Head->next->val == val){
                ListNode* tmp = Head->next->next;
                delete Head->next; 
                Head->next = tmp;
            }else{
                Head = Head->next;
            }
        }
        ListNode* out2 = out1->next;
        delete out1;
        return out2;
    }
};

707. 设计链表

cpp 复制代码
struct ln{
    int val;
    ln* next;
    ln():val(0), next(nullptr){}
    ln(int val):val(val), next(nullptr){}
    ln(int val, ln* next):val(val), next(next){}
};
class MyLinkedList {
public:
    ln *head = nullptr;
    ln *tail = nullptr;
    int num = 0;
    MyLinkedList() {
        head = new ln();
        tail = head;
    }
    
    ln* find(int index){
        ln* ob = head;
        for(int i=0; i<index; ++i){
            if(ob!=nullptr){
                ob = ob->next;
            }else{
                return nullptr;                                                                        
            }
        }
        return ob;
    }
    
    int get(int index) {
        ln* ob = find(index);
        if(ob==nullptr){return -1;}
        ob = ob->next;
        return ob==nullptr? -1: ob->val;
    }
    
    void addAtHead(int val) {
        ln* n = head->next;
        head->next = new ln(val, n);
        num++;
    }
    
    void addAtTail(int val) {
        ln* n = find(num);
        n->next = new ln(val);
        num++;
    }
    
    void addAtIndex(int index, int val) {
        ln* ob = find(index);
        if(ob==nullptr){return;}
        ln* tmp = ob->next;
        ob->next = new ln(val, tmp);
        num++;
    }
    
    void deleteAtIndex(int index) {
        ln* ob = find(index);
        if(ob==nullptr){return;}
        ln* tmp = ob->next;
        if(tmp==nullptr){return;}
        tmp = tmp->next;
        delete ob->next;
        ob->next = tmp;
        num--;
    }
};

206. 反转链表

cpp 复制代码
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        if(head==nullptr){return nullptr;}
        ListNode* tmp = nullptr;
        ListNode* out = nullptr;
        while(head!=nullptr){
            tmp = head->next;
            head->next = out;
            out = head;
            head = tmp;
        }
        return out;
    }
};
相关推荐
Jay Kay34 分钟前
GVPO:Group Variance Policy Optimization
人工智能·算法·机器学习
Epiphany.5561 小时前
蓝桥杯备赛题目-----爆破
算法·职场和发展·蓝桥杯
YuTaoShao1 小时前
【LeetCode 每日一题】1653. 使字符串平衡的最少删除次数——(解法三)DP 空间优化
算法·leetcode·职场和发展
茉莉玫瑰花茶1 小时前
C++ 17 详细特性解析(5)
开发语言·c++·算法
cpp_25011 小时前
P10570 [JRKSJ R8] 网球
数据结构·c++·算法·题解
cpp_25012 小时前
P8377 [PFOI Round1] 暴龙的火锅
数据结构·c++·算法·题解·洛谷
uesowys2 小时前
Apache Spark算法开发指导-Factorization machines classifier
人工智能·算法
TracyCoder1232 小时前
LeetCode Hot100(26/100)——24. 两两交换链表中的节点
leetcode·链表
季明洵2 小时前
C语言实现单链表
c语言·开发语言·数据结构·算法·链表
shandianchengzi2 小时前
【小白向】错位排列|图文解释公考常见题目错位排列的递推式Dn=(n-1)(Dn-2+Dn-1)推导方式
笔记·算法·公考·递推·排列·考公