20250305-Rain

1. 链表

#include <iostream>

using namespace std;

class Node
{
public:
  int val;    // 当前节点存储的值
  Node *next; // 下一个节点

  typedef Node *List; // List表示头结点, List->next是第一个存储数据的节点

public:
  /*
  List createList()
  {
  }
  */
  // 构造函数
  Node() : val(0), next(nullptr) {};

  // 添加到头部
  void addAtHead(int val)
  {
    Node *newNode = new Node();
    newNode->val = val;
    newNode->next = this->next;
    this->next = newNode;
  }

  // 添加到尾部
  void addAtTail(int val)
  {
    Node *newNode = new Node();
    newNode->val = val;
    Node *q = this;
    while (q->next)
    {
      q = q->next;
    }
    q->next = newNode;
  }

  // 指定索引插入
  void addAtIndex(int index, int val)
  {
    Node *p = this;
    for (int i = 0; i < index; i++)
    {
      // idx exceed socope
      if (!p->next)
      {
        return;
      }
      p = p->next;
    }
    Node *newNode = new Node();
    newNode->val = val;
    newNode->next = p->next;
    p->next = newNode;
  }

  // 指定索引删除
  void deleteAtIndex(int index)
  {
    Node *p = this;
    for (int i = 0; i < index; i++)
    {
      // idx exceed socope
      if (!p->next)
      {
        return;
      }
      p = p->next;
    }
    if (p->next)
    {
      // 删除 temp 节点
      Node *temp = p->next;
      p->next = temp->next;
      delete temp;
    }
  }

  // 打印结点
  void SListPrint()
  {
    Node *q = this->next;
    while (q)
    {
      std::cout << q->val << ' ';
      q = q->next;
    }
    cout << endl;
  }
};

int main()
{
  Node list;
  list.addAtHead(1);
  list.addAtTail(2);
  list.addAtTail(3);
  list.addAtTail(4);
  list.addAtIndex(3, 5);
  list.addAtHead(6);
  list.SListPrint();
  list.deleteAtIndex(3);
  list.SListPrint();
  // 样例输出 :
  // 6 1 2 5 3 4
  // 6 1 5 3 4
  return 0;
}

2. 控制台

3. EasyX

Last updated