leetcode 707. 设计链表

题目描述

leetcode 707. 设计链表_第1张图片

leetcode 707. 设计链表_第2张图片

代码:

class MyLinkedList {
    struct ListNode{
        int val{0};
        ListNode* next{nullptr};
        ListNode(int v,ListNode* ne):val(v),next(ne){}
    };
    ListNode* head_{nullptr};
    size_t node_cnt_{0};
public:
    MyLinkedList() {
        head_ = new ListNode(-1,nullptr);
    }

    ~MyLinkedList()
    {
        ListNode* pNode = head_->next;
        ListNode* temp;
        while(pNode != nullptr){
            temp = pNode->next;
            delete pNode;
            pNode = temp;
        }
        node_cnt_ = 0;
        delete head_;
        head_ = nullptr;
    }
    
    int get(int index) {
        if(index >= node_cnt_ || index <0)
            return -1;
        ListNode *pNode = head_;
        int temp = index+1;
        while(temp--){
            pNode = pNode->next;
        }
        return pNode->val;
    }
    
    void addAtHead(int val) {
        ListNode *newNode = new ListNode(val,nullptr);
        newNode->next = head_->next;
        head_->next = newNode;
        node_cnt_++;
    }
    
    void addAtTail(int val) {
        ListNode *newNode = new ListNode(val,nullptr);
        int cnt = node_cnt_;
        ListNode *pre = head_;
        while(cnt--){
            pre = pre->next;
        }
        newNode->next = pre->next;
        pre->next = newNode;
        node_cnt_++;
    }
    
    void addAtIndex(int index, int val) {
        if(index < 0 || index > node_cnt_)
            return;
        ListNode *newNode = new ListNode(val,nullptr);
        ListNode *pre = head_;
        while(index--){
            pre = pre->next;
        }
        newNode->next = pre->next;
        pre->next = newNode;
        node_cnt_++;
    }
    
    void deleteAtIndex(int index) {
        if(index >= node_cnt_ || index <0)
            return;
        ListNode* pre = head_;
        while(index--){
            pre = pre->next;
        }
        ListNode* tempNode = pre->next;
        pre->next = tempNode->next;
        delete tempNode;
        node_cnt_--;
    }
};

/**
 * 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,链表操作,leetcode,链表)