leetcode 707 设计链表

简介: leetcode 707 设计链表

设计链表


dabeafea66c54d41ac18dbe326435e86.png

#include <iostream>
#include <vector>
#include<algorithm> 
using namespace std;
//struct LinkNode
//{
//    int val;
//    LinkNode *next;
//    LinkNode():val(NULL), next(nullptr) {}
//    LinkNode(int x) :val(x),next(nullptr){}
//    LinkNode(int x , LinkNode *prt) :val(x),next(prt) {}
//};
class MyLinkedList {
public:
    struct LinkNode
    {
        int val;
        LinkNode* next;
        LinkNode() :val(NULL), next(nullptr) {}
        LinkNode(int x) :val(x), next(nullptr) {}
        LinkNode(int x, LinkNode* prt) :val(x), next(prt) {}
    };
    MyLinkedList() {
        Dummy_head = new LinkNode(0);
        size = 0;
    }
    int get(int index) {
        LinkNode* temp = Dummy_head->next;
        if (index > (size - 1) || index < 0) return -1;
        else
        {
            while (index--)
            {
                temp = temp->next;
            }
            return temp->val;
        }
    }
    void addAtHead(int val) {
         LinkNode* temp = new LinkNode(val, Dummy_head->next);
         Dummy_head->next = temp;
         size++;
    }
    void addAtTail(int val) {
        LinkNode* temp = new LinkNode(val,nullptr);
        LinkNode* cur = Dummy_head;
        while (cur->next != nullptr)
        {
            cur = cur->next;
        }
        cur->next = temp;
        size++;
    }
    void addAtIndex(int index, int val) {
        LinkNode* temp = new LinkNode(val);
        LinkNode* cur =  Dummy_head;
        if ( index>size || index < 0) return;
        while (index--)
        {
            cur = cur->next;
        }
        temp->next = cur->next;
        cur->next = temp;
        size++;
    }
    void deleteAtIndex(int index) {
        LinkNode* cur = Dummy_head;
        if (index >= size || index < 0) return;
        while (index--)
        {
            cur = cur->next;
        }
        LinkNode* temp = cur->next;
        cur->next = cur->next->next;
        delete temp;
        size--;
    }
    void print_list()
    {
        LinkNode* cur = Dummy_head;
        while (cur->next != nullptr)
        {
            cout << cur->next->val << ' ';
            cur = cur->next;
        }
        cout << endl;
    }   
private:
    LinkNode* Dummy_head;
    int size;
};
/**
 * 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);
 */
int main()
{
    MyLinkedList *linkedList = new MyLinkedList;
    for (int i = 1; i < 5; i++)
    {
        linkedList->addAtHead(i);
    }
    for (int i = 1; i < 5; i++)
    {
        linkedList->addAtTail(i);
    }
    linkedList->print_list();
    linkedList->deleteAtIndex(0);
    linkedList->print_list();
   /* cout<<linkedList->get(0);*/
  return 0;
}

二刷

class MyLinkedList {
public:
    struct Linknode
    {
        int val;
        Linknode *next;
        Linknode():val(0),next(nullptr){}
        Linknode(int x):val(x),next(nullptr){}
        Linknode(int x , Linknode* ptr):val(0),next(ptr){}
    };
    MyLinkedList() {
        _dummy_head = new Linknode(0);
        _size = 0;
    }
    int get(int index) {
        if(index > _size-1 || index < 0) return -1;
        Linknode *cur = _dummy_head->next;
        while(index)
        {
            cur = cur->next;
            index--;
        }
        return cur->val;
    }
    void addAtHead(int val) {
        Linknode *tmp = new Linknode(val);
        tmp->next = _dummy_head->next;
        _dummy_head->next = tmp;
        _size++;
    }
    void addAtTail(int val) {
        Linknode *tmp = new Linknode(val);
        Linknode *cur = _dummy_head;
        while(cur->next != nullptr)
            cur = cur->next;
        cur->next = tmp;
        _size++;
    }
    void addAtIndex(int index, int val) {
        if(index > _size) return;
        else if(index <= 0) addAtHead(val);
        else if(index == _size) addAtTail(val);
        else
        {
            Linknode *tmp = new Linknode(val);
            Linknode *cur = _dummy_head;
            while(index)
            {
                cur = cur->next;
                index--;
            }
            tmp->next = cur->next;
            cur->next = tmp;
            _size++;
        }
    }
    void deleteAtIndex(int index) {
        if(index > _size-1 || index<0 ) return;
        Linknode *cur = _dummy_head;
        while(index)
        {
            cur = cur->next;
            index--;
        }
        Linknode *tmp = cur->next;
        cur->next = cur->next->next;
        delete tmp;
        _size--;
    }
private:
    Linknode *_dummy_head;
    int _size;
};
/**
 * 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);
 */

相关文章
|
2月前
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
37 1
|
2月前
Leetcode第21题(合并两个有序链表)
这篇文章介绍了如何使用非递归和递归方法解决LeetCode第21题,即合并两个有序链表的问题。
52 0
Leetcode第21题(合并两个有序链表)
|
2月前
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
22 0
LeetCode第二十四题(两两交换链表中的节点)
|
2月前
Leetcode第十九题(删除链表的倒数第N个节点)
LeetCode第19题要求删除链表的倒数第N个节点,可以通过快慢指针法在一次遍历中实现。
44 0
Leetcode第十九题(删除链表的倒数第N个节点)
|
2月前
|
索引
力扣(LeetCode)数据结构练习题(3)------链表
力扣(LeetCode)数据结构练习题(3)------链表
95 0
|
2月前
【LeetCode 10】142. 环形链表 II
【LeetCode 10】142. 环形链表 II
23 0
|
2月前
【LeetCode 09】19 删除链表的倒数第 N 个结点
【LeetCode 09】19 删除链表的倒数第 N 个结点
18 0
|
2月前
【LeetCode 08】206 反转链表
【LeetCode 08】206 反转链表
13 0
|
2月前
【LeetCode 06】203.移除链表元素
【LeetCode 06】203.移除链表元素
33 0
|
4月前
|
算法
LeetCode第24题两两交换链表中的节点
这篇文章介绍了LeetCode第24题"两两交换链表中的节点"的解题方法,通过使用虚拟节点和前驱节点技巧,实现了链表中相邻节点的交换。
LeetCode第24题两两交换链表中的节点