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;
    }
};
相关推荐
居然有人65411 分钟前
23贪心算法
数据结构·算法·贪心算法
SylviaW081 小时前
python-leetcode 37.翻转二叉树
算法·leetcode·职场和发展
h^hh1 小时前
洛谷 P3405 [USACO16DEC] Cities and States S(详解)c++
开发语言·数据结构·c++·算法·哈希算法
玦尘、1 小时前
位运算实用技巧与LeetCode实战
算法·leetcode·位操作
重生之我要成为代码大佬1 小时前
Python天梯赛10分题-念数字、求整数段和、比较大小、计算阶乘和
开发语言·数据结构·python·算法
Best_Me072 小时前
【CVPR2024-工业异常检测】PromptAD:与只有正常样本的少样本异常检测的学习提示
人工智能·学习·算法·计算机视觉
HBryce242 小时前
缓存-算法
算法·缓存
eso19832 小时前
Spark MLlib使用流程简介
python·算法·spark-ml·推荐算法
夏末秋也凉2 小时前
力扣-回溯-93 复原IP地址
算法·leetcode
Erik_LinX2 小时前
算法日记27:完全背包(DFS->记忆化搜索->倒叙DP->顺序DP->空间优化)
算法·深度优先