1. 向链表头插入一个数; 2. 删除第 k 个插入的数后面的数; 3. 在第 k 个插入的数后插入一个数
#include<iostream>
typedef struct table table;
using namespace std;
struct table{
int dateint;
int size;
int curpos;
struct table *next;
};
table *create(int n){
static int pos=1;
table *k = new table;
k->dateint = n;
k->next = NULL;
k->curpos = pos;
pos++;
return k;
}
void insert(table *head){
int n;
cin >> n;
table *j;
j=create(n);
j->next = head->next;
head->next = j;
head->size++;
}
void delete_num(table *head){
table *p=head->next;
table *q;
int k;
cin >> k;
while(p->curpos!=k&&p!=NULL){
p = p->next;
}
q = p->next;
if(q!=NULL){
p->next = q->next;
free(q);
head->size--;
}
}
void insert_after_k(table *head){
int k;
cin >> k;
table *p = head->next;
while(p->curpos!=k&&p!=NULL){
p = p->next;
}
insert(p);
head->size++;
}
void print_h(table *head){
table *p = head->next;
while(p!=NULL){
cout << p->dateint<<" "<<p->curpos<<endl;
p = p->next;
}
cout << "当前链表尺寸" <<head->size << endl;
}
void menu(table *head){
int choose = 0;
while(1){
cout << "请输入你要使用的功能"<<endl;
cout << "1.向链表头插入一个数;\n2.删除第k个插入的数后面的数;\n3.在第k个插入的数后插入一个数\n4.打印链表元素\n5.退出菜单" << endl;
cin >> choose;
switch(choose){
case 1:{
insert(head);
break;
}
case 2:{
delete_num(head);
break;
}case 3:{
insert_after_k(head);
break;
}
case 4:{
print_h(head);
break;
}
case 5:{
exit(0);
}
default:{
cout << "输入有误,请重新输入!" << endl;
}
}
}
}
int main(){
table *head = new table;
head->next = NULL;
menu(head);
return 0;
}