链表打印出错怎么办?为什么插入元素的时候,插到第四个元素之后就只能打三个数据
#include<iostream>
#include<string>
using namespace std;
typedef struct student {
int num; // 学号
char name[10]; // 姓名
student* pre;
student* next;
} student;
student* head = NULL;
void Insert(int x, char *n) {
student* temp = new student();
temp->num = x;
for (int i = 0; n[i] != 0; i++) { temp->name[i] = n[i]; }
temp->pre = NULL;
temp->next = NULL;
if (head == NULL) {head = temp; return;}
student* current = head;
if (current->next != NULL)current = current->next;
temp->pre = current;
current->next = temp;}
void Delete(int n) {//删除第N个数据元素
student* current = head;
if (n == 1) {
head = head->next;
if (head == NULL) { cout << "Node now is empty!\n"; return; }
head->pre = NULL;
return;
}
else {
for (int i = 0; i < n - 1; i++) { current = current->next; }
if (current != NULL ) {
student* p = current->pre;
student* n = current->next;
if (current->next == NULL) { p->next = n; return; }
p->next = n;
n->pre = p;
delete current; return;
}
else cout << "invalid data!";
return;
}
}
void Research(int x) {
student* current = head;
while(current != NULL){
if (x == current->num) {
cout << current->num << '\t' << current->name<<"\n"; return; }
current = current->next; };
if (current == NULL) {
cout << "invalid data!"; return;}}
void Print() {
student* current = head;
if (head == NULL) { cout << "Node is empty!\n"; return; }
for(int i=1;current->next!=NULL;i++) {
cout << current->num << '\t' << current->name<<'\n';
current = current->next;
}cout << current->num << '\t' << current->name << '\n'; return;
}
void findbeforeAndAfter(int x,int i,int j) {
student* before; student* after;
student* current = head;
for (int I = 0; current != NULL||current->num != x; I++) {
current = current->next; }
if (current->num == x) {
before = current;
for (int I = 0; I < i; I++)before = before->pre;
after = current;
for (int I = 0; I < j; I++)after = after->next;
cout <<"该学生第i个前驱学生信息为:\n" << before->num << '\t' << before->name << '\n';
cout << "该学生第j个后继学生信息为:\n" << after->num << '\t' << after->name << '\n'; return; }
else {cout << "输入错误!"; return;}
}
int main() {
int choose;
cout << "1:插入数据元素\t2.删除数据元素\t3.查找数据元素\t4.显示线性表中的数据元素\t5.特殊查找函数\t6.退出\n";
loop:cout<<"选择一个操作:";
cin >> choose;
switch (choose) {
case(1): {
int num; char name[10]; string s;
cout << "num:";
cin >> num;
cout << "name:";
cin >> s;
int i = s.length();
for (int i = 0; i < s.length(); i++) { name[i] = s[i]; }
name[i] = '\0';
Insert(num, name);
goto loop; }
case(2): {
int x;
cout << "删除第几个元素:";
cin >> x;
Delete(x);
goto loop; }
case(3): {
int x;
cout << "请输入要查找的学号:";
cin >> x;
Research(x);
goto loop; }
case(4): { Print(); goto loop; }
case(5): {
int x, i, j;
cout << "给定学号x,找到该学生第i个前驱及该学生第j个后继的学生信息,分别键入x,i,j的值:";
cin >> x; cin >> i; cin >> j;
findbeforeAndAfter(x, i, j);
goto loop; }
case(6):return 0;
}
}