欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

单链表的建立,插入和释放

发布时间:2025/4/16 25 豆豆
生活随笔 收集整理的这篇文章主要介绍了 单链表的建立,插入和释放 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
#include<iostream> using namespace std;typedef struct node {int data;struct node*next; }Node, *List; //相当于把strcut node另外命名为NOde和List* 指针类型List creatlist() {Node* head, *p1, *p2; //建立一个链表,存储数据,p1和p2用于存储,当前数据和后一数据head = p2 = new Node;int num;cin >> num; while (-1 != num){p1 = new Node;p1->data = num;p1->next = NULL; //p1是新建的节点对象,存储输入的数据p2->next = p1; //p2指向新产生的对象p2 = p1; //p2转移到链表的尾部cin >> num;}p2->next = NULL; //这一步必须的操作,,因为链表尾部指向一个空的对象return head; }int getlistlength(List p) {int lenlistlength = 0;while (p->next != NULL) //获取链表的长度,主要是循环从链表的头部开始进行循环,知道节点指向一个空的对象{p = p->next;lenlistlength++;}return lenlistlength; } List insertnode(List p, int position, int element) {int length = getlistlength(p);if (position<1 || position>length + 1){cout << "wrong position" << endl;exit(1);}Node *p1 = p->next; //想要插入一个数据,必须得到插入位置的地址利用循环得到地址Node*p2 = p;int i;for (i = 0; i < position; i++){p2 = p1;p1 = p1->next; //得到插入位置的前一个对象和后一个对象的地址}Node* s = new Node; //建立一个新的对象存储输入的数据s->data = element;s->next = p1; p2->next = s; return p; }void printlist(List p) {while (p->next != NULL) //循环输出,知道链表指向的对象是空为止{/*p = p->next;*/cout << p->next->data << endl; //因为第一个是链表的头,没存储数据p=p->next;} }void releaselist(List p) //利用递归的方法进行释放每一个对象,,,迭代到最后一个对象,利用栈 思想进行释放内存 {if (NULL == p->next){delete p;}else{releaselist(p->next);delete p;} } int main() {List head = creatlist();printlist(head);int position = 4;int element = 100;head = insertnode(head, position, element);releaselist(head);return 0; }

总结

以上是生活随笔为你收集整理的单链表的建立,插入和释放的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。