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 }
样例输出: