单链表的创建,插入,删除,遍历
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 }
样例输出:
以上是关于单链表的创建,插入,删除,遍历的主要内容,如果未能解决你的问题,请参考以下文章