C++单链表的创建插入删除以及逆序操作

来源:互联网 发布:淘宝助理5.7.8.1 编辑:程序博客网 时间:2024/05/29 14:11

之前的笔试面试过程中也经常遇到链表问题,趁着有时间就自己动手写写调试了一把,也加深了一下自己对链表的认识和理解。由于本人非常初级,所以只是将自己调试通过的代码记录一下,供自己参考啦!

#include <iostream>#include <string>using namespace std;int n = 10;typedef struct LinkList {int data;struct LinkList *next;}LL;LL *creatLL(int n)//通过一个一个输入来创建长度为n的单链表单链表{int x,k;LL *head,*r,*p;p = (LL *)malloc(sizeof(LL));head = p;p->next = NULL;r = p;for (k = 1;k<=n;k++){cout<<"input value:"<<endl;cin>>x;p = (LL *)malloc(sizeof(LL));p->data = x;p->next = NULL;r->next = p;r = r->next;}return head;}LL *InsetNode(LL *head,int Num)//在第Num个元素之前插入节点{int t = 0;int data0;LL *p,*q;p = head;if (Num>n||Num<0){cout<<"input error!"<<endl;return 0;}while (t<Num-1)//找到要插入位置的前一个节点{p = p->next;t++;}q = (LL *)malloc(sizeof(LL));if (q == NULL){cout<<"can not find space!"<<endl;return 0;}cout<<"please input the Number:";cin>>data0;cout<<endl;q->data = data0;q->next = p->next;p->next = q;n++;return head;}LL *DelNode(LL *head,int Num)//删除第Num的节点{int t = 0;LL *p,*q;p = head;if (Num>n||Num<0){cout<<"input error!"<<endl;return 0;}while (t<Num-1)//找到要删除位置的前一个节点{p = p->next;t++;}q = p->next;p->next = p->next->next;free(q);//释放被删除的节点n--;return head;}LL *RevertList(LL *head)//逆序单链表{if (head->next == NULL){cout<<"only one head bode"<<endl;return head;}LL *p,*q,*succ;p = head->next;q = NULL;//新建一个空指针while (p){succ = p->next;//保存下一个节点p->next = q; //指向直接前驱q = p;   //保存待逆序的前一个节点p = succ; //得到将逆序的节点}head->next = q;//得到待逆序的前一个节点,最后head将指向原链表的最后一个节点return head;}void main(){LL *head,*p;head = creatLL(n);//p = InsetNode(head,0);//p = DelNode(head,3);p = RevertList(head);cout<<n<<endl;while(p->next != NULL){cout<<p->next->data<<" ";p = p->next;}}

这里链表的创建是通过一个一个输入来完成的,也可以换成一次输入指定个数的数据来创建链表,也很简单,这里就不啰嗦了,有兴趣的自己动手试试吧!

0 0
原创粉丝点击