当前位置:
首页 >
单链表的建立,插入和释放
发布时间: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;
}
总结
以上是生活随笔为你收集整理的单链表的建立,插入和释放的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 二叉树(遍历、建立、深度)
- 下一篇: 双链表的建立、求长、定位、插入、删除、输