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

来源:互联网 发布:网购商城php源代码 编辑:程序博客网 时间:2024/04/29 12:36
#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;}

0 0
原创粉丝点击