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;
    }
};
相关推荐
Hygge-star2 分钟前
【数据结构】二分查找-LeftRightmost
java·数据结构·算法
代码小将6 分钟前
Leetcode76覆盖最小子串
笔记·学习·算法
努力的小帅10 分钟前
C++_STL_map与set
开发语言·数据结构·c++·学习·leetcode·刷题
朱剑君24 分钟前
第十天——贪心算法——深度总结
算法·贪心算法
序属秋秋秋1 小时前
《数据结构初阶》【二叉树 精选9道OJ练习】
c语言·数据结构·c++·算法·leetcode
Tiny番茄1 小时前
LeetCode 235. 二叉搜索树的最近公共祖先 LeetCode 701.二叉搜索树中的插入操作 LeetCode 450.删除二叉搜索树中的节点
数据结构·算法·leetcode
S01d13r7 小时前
LeetCode 解题思路 48(编辑距离、只出现一次的数字)
算法·leetcode·职场和发展
C_Liu_7 小时前
C语言:深入理解指针(5)
java·c语言·算法
small_wh1te_coder7 小时前
从经典力扣题发掘DFS与记忆化搜索的本质 -从矩阵最长递增路径入手 一步步探究dfs思维优化与编程深度思考
c语言·数据结构·c++·stm32·算法·leetcode·深度优先
枫景Maple7 小时前
LeetCode 45. 跳跃游戏 II(中等)
算法·leetcode