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;
    }
};
相关推荐
shinelord明4 分钟前
【再谈设计模式】享元模式~对象共享的优化妙手
开发语言·数据结构·算法·设计模式·软件工程
დ旧言~10 分钟前
专题八:背包问题
算法·leetcode·动态规划·推荐算法
_WndProc27 分钟前
C++ 日志输出
开发语言·c++·算法
努力学习编程的伍大侠41 分钟前
基础排序算法
数据结构·c++·算法
XiaoLeisj1 小时前
【递归,搜索与回溯算法 & 综合练习】深入理解暴搜决策树:递归,搜索与回溯算法综合小专题(二)
数据结构·算法·leetcode·决策树·深度优先·剪枝
Jasmine_llq1 小时前
《 火星人 》
算法·青少年编程·c#
闻缺陷则喜何志丹2 小时前
【C++动态规划 图论】3243. 新增道路查询后的最短距离 I|1567
c++·算法·动态规划·力扣·图论·最短路·路径
Lenyiin2 小时前
01.02、判定是否互为字符重排
算法·leetcode
鸽鸽程序猿2 小时前
【算法】【优选算法】宽搜(BFS)中队列的使用
算法·宽度优先·队列