Leetcode 707.设计链表

先附题目截图

在这里插入图片描述

解题源码

class MyLinkedList {
    
    
public:

    //定义链表节点结构体
    struct LinkedNode
    {
    
    
        int val;
        LinkedNode* next;
        LinkedNode(int val): val(val),next(nullptr){
    
    }
    };

    MyLinkedList() 
    {
    
    
        dummyhead=new LinkedNode(0);
        size=0;
    }
    
    int get(int index) 
    {
    
    
        if(index>(size-1)||index<0)
        {
    
    
            return -1;
        }
        LinkedNode* curnode=dummyhead->next;
        while(index--)
        {
    
    
            curnode=curnode->next;
        }
        return curnode->val;
    }
    //在链表第一个元素前添加一个值为val的节点   
    void addAtHead(int val) 
    {
    
    
        LinkedNode* newnode=new LinkedNode(val);
        newnode->next=dummyhead->next;
        dummyhead->next=newnode;
        size++;
    }
    //将值为val的节点追加到链表的最后一个元素
    void addAtTail(int val) 
    {
    
    
        LinkedNode* newnode=new LinkedNode(val);
        LinkedNode* curnode=dummyhead;
        while(curnode->next!=nullptr)
        {
    
    
            curnode=curnode->next;
        }
        curnode->next=newnode;
        size++;
    }
    //在链表中的第 index 个节点之前添加值为 val  的节点
    void addAtIndex(int index, int val) 
    {
    
    
        if(index>size)
        {
    
    
            return ;
        }
        LinkedNode* newnode=new LinkedNode(val);
        LinkedNode* curnode=dummyhead;
        while(index--)
        {
    
    
            curnode=curnode->next;
        }
        newnode->next=curnode->next;
        curnode->next=newnode;
        size++;
    }
    //如果索引 index 有效,则删除链表中的第 index 个节点。
    void deleteAtIndex(int index) 
    {
    
    
        if(index>=size||index<0)
        {
    
    
            return ;
        }
        LinkedNode* curnode=dummyhead;
        while(index--)
        {
    
    
            curnode=curnode->next;
        }
        
        curnode->next=curnode->next->next;
        size--;
    }
private:
    int size;
    LinkedNode* 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);
 */

有关addAtIndex的函数的设计:法二

void addAtIndex(int index, int val) 
    {
    
    
        if(index>size)
        {
    
    
            return ;
        }
        if(index==size)
        {
    
    
            LinkedNode* newnode=new LinkedNode(val);
            LinkedNode* curnode=dummyhead;
            while(curnode->next!=nullptr)
            {
    
       
                curnode=curnode->next;
            }
            curnode->next=newnode;
            size++;
            return ;
        }
        if(index<size)
        {
    
    
            LinkedNode* newnode= new LinkedNode(val);
            LinkedNode* curnode= dummyhead;
            /*
            for(;index>0;index--){
                curnode = curnode -> next;
            }
            */
            while(index--)
            {
    
       
                curnode=curnode->next;
            }
            newnode->next=curnode->next;
            curnode->next=newnode;
            size++;
            return ;
        }
    }

猜你喜欢

转载自blog.csdn.net/weixin_45847364/article/details/121595026