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

Posted diandianer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单链表的创建,插入,删除,遍历相关的知识,希望对你有一定的参考价值。

  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("
");
 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("非法插入
");
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("非法删除
");
128     }
129     return 0;
130 }
样例输出:
技术分享图片

 


 


以上是关于单链表的创建,插入,删除,遍历的主要内容,如果未能解决你的问题,请参考以下文章

单链表的创建插入删除遍历的Go实现

数据结构代码(用C语言) 单链表的插入和删除

单链表

单链表的尾插,头插,遍历,查找和插入

单链表的基本操作(创建,删除,插入,逆置)

单链表的初始化,创建,插入,删除和反转