七月集训day12链表

707. 设计链表

涉及链表的增删改查

代码/思路

class MyLinkedList {
    struct Node {
        int val;
        Node *next;

        Node(){next = NULL;}
        Node(int v): val(v), next(NULL){}
    };
    Node *dummyHead;
public:
    MyLinkedList() {
        dummyHead = new Node();
    }
    
    int get(int index) {
        Node *now = dummyHead;
        for(int i = 0; i <= index; i++)
        {
            now = now -> next;
            if(now == NULL)
            {
                return -1;
            }
        }
        return now->val;
    }
    
    void addAtHead(int val) {
        Node *p = new Node(val);
        Node *dnext = dummyHead -> next;
        dummyHead->next = p;
        p->next = dnext;
    }
    
    void addAtTail(int val) {
        Node *p = new Node(val);
        Node * now = dummyHead;
        while(now-> next)
        {
            now = now->next;
        }
        now->next = p;
    }
    
    void addAtIndex(int index, int val) {
        Node *p = new Node(val);
        Node *now = dummyHead;
        if(index < 0)
        {
            addAtHead(val);
            return;
        }
        for(int i = 0; i < index; i++)
        {
            now = now->next;
            if(now == NULL)
            {
                return;
            }
        }
        Node *nnext = now->next;
        now->next = p;
        p->next = nnext;
    }
    
    void deleteAtIndex(int index) {
        if(get(index) == -1)
        {
            return;
        }
        Node *now = dummyHead;
        for(int i = 0; i < index; i++)
        {
            now = now->next;
        }
        now->next = now->next->next;
    }
};

/**
 * 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);
 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值