C++写链表一些基础的操作

#include <iostream>
using namespace std;

class node{
public:
    int data;
    node *next;
};

 

class list{
private:
    node *head;
    node *temp;
public:
    list():temp(NULL),head(NULL){}//初始化节点
   // ~list();                 //析构
    node *create_list();     //尾插法创造单链表
    node *list_create();     //头插法创建单链表
    bool isEmpty();          //判断链表是否为空
    int length_list();       //求链表的长度
    int getData();           //查找数据(按值查找位置)
    int getData2();          //查找数据(按位置查找值)
    node *insert_list();     //插入数据
    node *delete_list();     //删除数据(根据数据删除)
    node *delete_list2();    //删除数据(根据位置删除)
    node *reverse_list();    //逆置单链表
    node *traversal();       //遍历线性表
    node *splice(node *l1,node *l2); //新增两个有序链表拼接成新有序链表
};

 

//尾插法创建单链表
node *list::create_list()
{
    int x=0;
    node *temp = 
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
链表是一种常见的数据结构,它可以动态地存储数据,可以方便地插入和删除节点。链表由一个个节点组成,每个节点包含数据和指向下一个节点的指针。 以下是C++实现链表基础操作: 1. 定义节点结构体 ```cpp struct Node { int data; Node* next; }; ``` 2. 创建链表 ```cpp Node* createList(int n) { Node* head = nullptr; Node* tail = nullptr; for (int i = 0; i < n; i++) { Node* newNode = new Node(); cin >> newNode->data; newNode->next = nullptr; if (head == nullptr) { head = newNode; tail = newNode; } else { tail->next = newNode; tail = newNode; } } return head; } ``` 3. 遍历链表 ```cpp void traverseList(Node* head) { Node* p = head; while (p != nullptr) { cout << p->data << " "; p = p->next; } cout << endl; } ``` 4. 插入节点 ```cpp void insertNode(Node*& head, int pos, int val) { Node* newNode = new Node(); newNode->data = val; newNode->next = nullptr; if (head == nullptr) { head = newNode; return; } if (pos == 0) { newNode->next = head; head = newNode; return; } Node* p = head; int i = 0; while (p != nullptr && i < pos - 1) { p = p->next; i++; } if (p == nullptr) { cout << "Invalid position" << endl; return; } newNode->next = p->next; p->next = newNode; } ``` 5. 删除节点 ```cpp void deleteNode(Node*& head, int pos) { if (head == nullptr) { cout << "Empty list" << endl; return; } if (pos == 0) { Node* temp = head; head = head->next; delete temp; return; } Node* p = head; int i = 0; while (p != nullptr && i < pos - 1) { p = p->next; i++; } if (p == nullptr || p->next == nullptr) { cout << "Invalid position" << endl; return; } Node* temp = p->next; p->next = temp->next; delete temp; } ``` 6. 查找节点 ```cpp int searchNode(Node* head, int val) { Node* p = head; int i = 0; while (p != nullptr) { if (p->data == val) { return i; } p = p->next; i++; } return -1; } ``` 7. 获取链表长度 ```cpp int getListLength(Node* head) { int len = 0; Node* p = head; while (p != nullptr) { len++; p = p->next; } return len; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值