C++ 链表的基本操作:头插入、尾插入、遍历、判断链表是否为空、清空、求长度、插入、删除、逆置链表和排序

//
//  main.cpp
//  List:
//  链表的操作:
//     1.头插入
//     2.尾插入建立链表;
//     3.遍历链表;
//     4.链表是否为空
//     5.清空链表
//     6.求链表的长度
//     7.排序
//     8.插入结点
//     9.删除结点:记得要释放删除节点的存储空间,避免内存泄漏
//     10.将链表逆置
//     11.退出

#include <iostream>
using namespace std;

struct Node { // 结点定义
    int data; // 数据域
    Node *next; // 指针域:指向下一个结点
};

// 头插入建立链表:引入头结点(不存放数据的结点,为了方便对链表操作)
// 注意区分头结点和首结点(链表中第一个存放有效数据的结点,即头结点指向的下一个结点)
Node *headCreate() {
    int len, val; // val临时存放用户输入的结点的值
    
    // 动态分配内存空间,
    Node *head = new Node(); // 头结点
    head->next = NULL;
    if(head == NULL) {
        cerr << "申请空间失败,程序终止!" << endl;
        exit(1);
    }
    cout << "请输入你需要生成的链表结点的个数:";
    cin >> len;
    cout << "请输入各个结点的值:";
    for(int i = 0; i < len; i++) {
        cin >> val;
        Node *newNode = new Node(); // 新结点
        if(newNode == NULL) {
            cerr << "申请空间失败,程序终止!" << endl;
            exit(1);
        }
        newNode->data = val;
        // 因为head是头结点(指向首结点),所以新结点应该挂入到原头结点指向
        // 的下一个有效结点(即首结点)前面,成为新的首结点
        newNode->next = head->next; // 先保存原首结点
        // 头结点往前移,永远都是头结点
        // 注意,因为头结点是不存放数据的,所以是head->next 指向新结点
        head->next = newNode; // 挂入到头结点的下一个结点,成为新的首结点
    }
    return head; // 把头结点返回
}

// 尾插入建立链表
Node *tailCreate() {
    int len, val; // val临时存放用户输入的结点的值
    
    // 动态分配内存空间,引入头结点(不存放数据的结点,为了方便对链表操作)
    Node *head = new Node();
    Node *tail = head; // 尾结点,跟着链表走
    t
  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值