试图用temp不断定位结点,然后存入新链表。但总是在成功一两个结点后在定位函数里报错p是null。
#include
using namespace std;
struct Student
{
int Number;
string Name;
string Birth;//出生日期
string Gender;
string Address;//地址名
int Coordinate[2];//地址位置
};
typedef struct LinkNode
{
Student stu;
LinkNode *link;
};
//添加(头插)
void add_stu(LinkNode *list,LinkNode *node)
{
if (node == NULL)
{
LinkNode *temp = creat_node();
temp->link = list->link;
list->link = temp;
}
else
{
node->link = list->link;
list->link = node;
}
}
LinkNode *locate1_node(LinkNode *list, int n, int num)//按学号定位结点
{
LinkNode *p = new LinkNode();
p = list;
for (int i = 0; i <= n; i++)
{
p = p->link;
if (p->stu.Number == num)
{
return p;
}
}
cout << "未找到该学号的学生。" << endl;
return NULL;
}
//排序
LinkNode *rank_list(LinkNode *list, int n)
{
LinkNode *p = list;
int *arr;
arr = new int[n];
//将所有的学号放入一个数组
for (int i = 0; i < n; i++)
{
p = p->link;
arr[i] = p->stu.Number;
}
//将数组冒泡排序
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - i - 1; j++)
{
if (arr[j] < arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
cout << "学号排序结果为:" << endl;
for (int i = 0; i < n; i++)
{
cout << arr[i] << " ";
}
cout << endl << endl;
LinkNode *newlist = new LinkNode();
LinkNode *temp = new LinkNode();
for (int i = 0; i < n; i++)
{
temp = locate1_node(list, n, arr[i]);
cout << temp->stu.Number << endl;
add_stu(newlist, temp);
}
return newlist;
}