707链表-设计链表

Posted 孤注一掷 、

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了707链表-设计链表相关的知识,希望对你有一定的参考价值。

题目

链接:707. 设计链表 - 力扣(LeetCode)

思路

设置一个头结点来统一方式

代码:

class MyLinkedList 
public:
    //定义链表结点结构体
    struct LinkNode 
        int val;
        LinkNode* next;
        LinkNode(int val):val(val), next(nullptr)
    ;

    //初始化链表
    MyLinkedList() 
        //定义一个头结点
        dummyHead = new LinkNode(0);
        size = 0;
    
    
    //获取到第index个结点数值
    int get(int index) 
        //先判断溢出
        if(index > (size - 1) || index < 0)
            return -1;
        
        LinkNode* cur = dummyHead->next;
        while(index)
            cur = cur->next;
            index--;
        
        return cur->val;
    
    //在链表最前面插入一个结点
    void addAtHead(int val) 
        LinkNode* newNode = new LinkNode(val);
        newNode->next = dummyHead->next;
        dummyHead->next = newNode;
        size++;
    
    //在链表末尾插入一个结点
    void addAtTail(int val) 
        LinkNode* newNode = new LinkNode(val);
        LinkNode* cur = dummyHead;
        while(cur->next != nullptr)
            cur = cur->next;
        
        cur->next = newNode;
        size++;
    
    //在链表第index个结点之前添加值为val的结点
    void addAtIndex(int index, int val) 
        if(index > size) return ;
        if(index < 0 ) index = 0;
        LinkNode* newNode = new LinkNode(val);
        //注意这里和获取第index个结点的值不一样
        LinkNode* cur = dummyHead;
        while(index)
            cur = cur->next;
            index--;
        
        //此时cur指向第index结点的前一个结点
        newNode->next = cur->next;
        cur->next = newNode;
        size++;
    
    //删除第index个结点
    void deleteAtIndex(int index) 
        if(index > (size - 1) || index < 0)
            return ;
        
        LinkNode* cur = dummyHead;
        while(index)
            cur = cur->next;
            index--;
        
        //此时cur指向第index结点的前一个结点
        LinkNode* temp = cur->next;
        cur->next = cur->next->next;
        delete temp;
        size--;
    

    private:
    int size;
    LinkNode* dummyHead;
;

/**
 * Your MyLinkedList object will be instantiated and called as such:
 * MyLinkedList* obj = new MyLinkedList();
 * int param_1 = obj->get(index);
 * obj->addAtHead(val);
 * obj->addAtTail(val);
 * obj->addAtIndex(index,val);
 * obj->deleteAtIndex(index);
 */

 

以上是关于707链表-设计链表的主要内容,如果未能解决你的问题,请参考以下文章

707. 设计链表

LeetCode:707. 设计链表(python3)

707.设计链表

707.设计链表

707 设计链表

Java算法 每日一题 编号707:设计链表