LeetCode 707 设计链表[链表] HERODING的LeetCode之路

Posted HERODING23

tags:

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


解题思路:
一道非常基础的链表题,需要注意的地方在于节点的索引是从0开始的,首先定义一个head。不作为任何节点,只是作为链表的头部,get步骤就定义指针,循环到index的位置,返回该值即可,addhead和addtail都直接调用addIndex即可,在addIndex中,遍历到要添加的位置的前面,然后生成node,指向之前位置的节点即可,删除函数也是同样的操作,只不过要多一个pre指针,让pre指向cur的next,然后删除cur即可,代码如下:

class MyLinkedList 
private:
    int size;
    ListNode* head;
public:
    MyLinkedList() 
        // 初始化头节点
        this->size = 0;
        this->head = new ListNode(0);
    
    
    int get(int index) 
        if(index < 0 || index >= size) 
            return -1;
        
        ListNode* cur = head;
        for(int i = 0; i <= index; i ++) 
            cur = cur->next;
        
        return cur->val;
    
    
    void addAtHead(int val) 
        return addAtIndex(0, val);
    
    
    void addAtTail(int val) 
        return addAtIndex(size, val);
    
    
    void addAtIndex(int index, int val) 
        if(index > size) 
            return;
        
        index = max(index, 0);
        size ++;
        ListNode* cur = head;
        ListNode* node = new ListNode(val);
        for(int i = 0; i < index; i ++) 
            cur = cur->next;
        
        node->next = cur->next;
        cur->next = node;
    
    
    void deleteAtIndex(int index) 
        if(index < 0 || index >= size) 
            return;
        
        size --;
        ListNode* cur = head;
        ListNode* pre = head;
        for(int i = 0; i <= index; i ++) 
            pre = cur;
            cur = cur->next;
        
        pre->next = cur->next;
        delete cur;
    
;

/**
 * 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);
 */

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

707链表-设计链表

707链表-设计链表

图解 LeetCode 707一题学会链表的 5 种操作。

图解 LeetCode707:一题学会链表的 5 种操作。

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

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