C++简单单向链表的实现,插入,删除,打印

简单的实现单项链表

链表是一种非常重要的数据结构,记得刚学习的时候,简直是一头雾水,现在回过头来练练手,看看自己有没有啥长进。

直接上代码:

#include <iostream>
#include <vector>

using namespace std;
typedef struct Node {
    int num_;
    struct Node *next;
}Node;

//通过模板的使用,可以避免numList数组退化成指针
template<typename T>
void makeList(Node *head,T& numList){
//    cout<< sizeof(numList) / sizeof(*numList)<<endl;
    head->num_ = 0;
    head->next = nullptr;
//    p表示当前指向的节点,s表示下一个节点
    Node *p, *s;
    p = head;
    for(auto &num : numList){
        s = (Node*)malloc(sizeof(Node));
        s->num_ = num;
        s->next = nullptr;
        p->next = s;
        p = s;
    }
}

void print_(Node *head){
    Node *p;
    p = head->next;
    while (p != nullptr){
//        打印节点的num_和节点的存储地址
        cout<<p->num_<<" "<<p<<" ";
        p = p->next;
    }
    cout<<endl;
}

void delete_(Node *head, int index){
//    index > 0
    Node *p;
    p = head;
    int count = 0;
//    找到被删除节点的前一个节点
    while(count != index - 1){
        p = p->next;
        count++;
    }
//    节点删除需要充分考虑到内存的处理,下面仅仅简单的处理,并不合适
    Node *s;
    s = (Node*)malloc(sizeof(Node));
    s->next = p->next->next;
    delete p->next;
    p->next = s->next;
    free(s);
}

void add_(Node *head, int index, int addNumber){
//    index > 0
    Node *p;
    p = head;
    int count = 0;
    while(count != index - 1){
        p = p->next;
        count++;
    }
    Node *s;
    s = (Node*)malloc(sizeof(Node));
    s->num_ = addNumber;
    s->next = p->next;
    p->next = s;
}

int main() {
    Node *head;
    int a[] = {1,2,3,4,5,6,7,8,9};
//    cout<< sizeof(a)/ sizeof(*a)<<endl;
    head=(Node*)malloc(sizeof(Node));
    makeList(head,a);
    print_(head);
    delete_(head, 2);
    print_(head);
    add_(head, 2, 2);
    print_(head);
    return 0;
}

运行结果:
在这里插入图片描述
上面的代码是自己一点一点敲出来的,比起以前还得看书才能敲出来,现在算是有点进步了,虽然只是简单的单向也没有涉及到链表的合并、排序等问题,但是这些足以让我有不小收获。温故而知新的感觉,还不赖!当然啦,还是有很多不足的。
简单的说一下上面代码的几个不足:

  1. 写代码的时候,尤其是写函数的时候,第一步应该是检查参数,对于不合理的参数要给出对应的处理方式,显然我只是写了index > 0的注释,糊弄了一下
  2. 处理的内容比较简单,没有啥高端大气上档次的东西。
  3. 内存处理不严谨,要说上面两个问题还可以修正一下,但是这个问题我是真的头皮发麻,敲这几行的同时自己也算是拣尽脑汁的去探索delete malloc free等的奥秘,虽有收获,但始终做不到完善,听到网上许多大佬讲内存泄漏这样的高级BUG,我默默的留下了无能的眼泪。。。。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值