码迷,mamicode.com
首页 > 其他好文 > 详细

单链表的创建,插入,删除,遍历

时间:2018-11-14 20:53:41      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:link   clu   span   生成   com   main   out   error   next   

  1 #include<stdio.h>
  2 #include<iostream>
  3 #include<malloc.h>
  4 #define OK 1
  5 #define ERROR 0
  6 using namespace std;
  7 typedef struct LNode
  8 {
  9     int data;
 10     struct LNode *next;
 11 } LNode,*LinkList;
 12 
 13 void Init(LinkList &L)///初始化
 14 {
 15     L=new LNode;
 16     L->next=NULL;
 17 }
 18 void CreatList_R(LinkList &L,int n)///尾插法  创建链表
 19 {
 20     int x;
 21     LinkList r,p;
 22     L =new LNode;
 23     L->next=NULL;//先建立一个带头结点的空链表
 24     r=L;//尾指针r指向头结点
 25     for(int i=1; i<=n; i++)
 26     {
 27         p=new LNode;
 28         scanf("%d",&x);
 29         p->data=x;
 30         p->next=NULL;
 31         r->next=p;//将新结点*p插入到尾结点*r之后
 32         r=p;//r指向新的尾结点*p
 33     }
 34 }
 35 void CreatList_H(LinkList &L,int n)//头插法  创建链表
 36 {
 37     int x;
 38     LinkList P;
 39     L=new LNode;
 40     L->next=NULL;//先建立一个带头结点的空链表
 41     for(int i=1; i<=n; i++)
 42     {
 43         scanf("%d",&x);
 44         P=new LNode;//生成新节点
 45         P->data=x; //输入元素值赋给新节点*P的数据域
 46         P->next=L->next;
 47         L->next=P;//将新节点*P插入到头结点之后
 48     }
 49 }
 50 void outputList(LinkList L)///单链表的遍历
 51 {
 52     LinkList p;
 53     p=L->next ;
 54     if(p==NULL)
 55         cout<<"该链表是空链表"<<endl;
 56     while(p!=NULL)
 57     {
 58         cout<<p->data<<" ";
 59         p=p->next ;
 60     }
 61     printf("\n");
 62 }
 63 
 64 int ListInsert(LinkList &L,int i,int e)
 65 {
 66     ///在带头结点的单链表L中第i个位置插入值为e的新节点
 67     LinkList P,S;
 68     P=L;
 69     int j=0;
 70     while(P&&(j<i-1))
 71     {
 72         P=P->next;
 73         ++j;
 74     }
 75     if(!P||j>i-1)
 76         return 0;
 77     S=new LNode;
 78     S->data=e;
 79     S->next=P->next;
 80     P->next=S;
 81     return 1;
 82 }
 83 int ListDelete(LinkList &L,int i)
 84 {
 85     ///在带头结点的单链表L中,删除第i个元素
 86     LinkList P,q;
 87     P=L;
 88     int j=0;
 89     while((P->next)&&(j<(i-1)))
 90     {
 91         P=P->next;
 92         ++j;
 93     }
 94     if(!(P->next)||(j>i-1))
 95         return 0;
 96     q=P->next;
 97     P->next=q->next;
 98     delete q;
 99     return 1;
100 }
101 
102 int main()
103 {
104     int n,x,e;
105     LinkList H;
106     Init(H);
107     scanf("%d",&n);
108     CreatList_R(H,n);
109     int In;
110     scanf("%d",&In);
111     while(In--)
112     {
113         scanf("%d %d",&x,&e);
114         if(ListInsert(H,x,e))
115         outputList(H);
116         else
117             printf("非法插入\n");
118     }
119     int D;
120     scanf("%d",&D);
121     while(D--)
122     {
123         scanf("%d",&x);
124         if(ListDelete(H,x))
125         outputList(H);
126         else
127             printf("非法删除\n");
128     }
129     return 0;
130 }
样例输出:
技术分享图片

 


 

单链表的创建,插入,删除,遍历

标签:link   clu   span   生成   com   main   out   error   next   

原文地址:https://www.cnblogs.com/diandianer/p/9959860.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!