算法day9 设计链表

题目描述

思路
整体的思路的话就是增删查三大件,是很常规的一道题。问题在于在leetcode的环境下要自己在类中定义链表结构体。这里比较坑,因为之前的题目基本函数实现所需要的前置条件初始模板都已给出,所以这里可能会让人很疑惑,不知从何下手。由于本题总共涉及到五个函数,所以接下来对链表的初始化以及五个函数逐一介绍。

1.链表节点结构体:

class MyLinkedList {
    public:
    struct ListNode{//结构体定义
    int val;        //数据域
    ListNode *next;  //指针域
    ListNode(int x):val(x),next(nullptr){} //构造函数。这个构造函数可以自己给出,当然如果不写的话c++也会提供一个默认的构造函数,但不具有初始化功能,推荐自己写
    
    private:
    ListNode *_dummyhead; //私有类成员,作为虚拟头节点,便于链表操作的统一
    int       _size;      //链表长度
};

2.初始化链表

MyLinkedList() {
     _dummyhead = new ListNode(0); 
     _size = 0;
}

3.获取第index个节点数值

int get(int index) {
    if(index< 0 || index >(_size-1)){//判断一下边界
        return -1;
    }
    ListNode *cur = _dummyhead -> next;
    while(index--){//迭代指针到我们的目标位置
        cur = cur -> next;
    }
    return cur -> val;
} 

4.在头部插入节点

  void addAtHead(int val) {
    ListNode *newNode = new ListNode(val); //创建节点
    //使新创建的节点链接在虚拟头节点的后驱
    newNode -> next = _dummyhead -> next; 
    _dummyhead -> next =  newNode;
    _size++; //更新size大小
    return;
}

5.在尾部插入节点

   void addAtTail(int val) {
    ListNode *newNode = new ListNode(val);
    ListNode *cur = _dummyhead ;
    while(cur->next!=nullptr){//迭代到尾部
        cur = cur -> next;
    }
    cur -> next = newNode;
    newNode -> next = nullptr;//newNode成为了实际上的节点
    _size++;
    return;
}

6.在index处插入节点

void addAtIndex(int index, int val) {
    if(index<0||index>_size){
        return;
    }
    ListNode *newNode = new ListNode(val);
    ListNode *cur = _dummyhead;
    int cnt = index;
    while(cnt--){//迭代
        cur = cur ->next;
    }
    //使newNode置于index位置节点的前驱与index处节点之间
    newNode -> next = cur -> next;  
    cur -> next = newNode;
    _size++;
    return;

}

7.删除index处节点

  void deleteAtIndex(int index) {
    if(index<0||index>_size-1){
        return;
    }
    ListNode *cur = _dummyhead;
    while(index--){迭代到要删除位置的前驱
        cur = cur -> next;
    }
    ListNode *temp = cur -> next;
    cur -> next = cur -> next ->next;
    delete temp; //不要忘记释放内存
    _size--;
    return;
}

END

posted on 2025-04-13 18:09  sakura430  阅读(18)  评论(0)    收藏  举报