我试图弄清楚如何让我的链接列表以数字顺序显示数值变量。我知道我需要设置另一个空格,但是我很遗憾按数字顺序设置它。这是我的源代码:
#include <iostream>
struct node
{
int number;
node *next;
};
bool isEmpty(node *head);
char menu();
void insertAsFirstElement(node *&head, node *&last, int number);
void insert(node *&head, node *&last, int number);
void remove(node *&head, node *&last);
void showList(node *current);
void showLogic(node *current);
bool isEmpty(node *head)
{
if (head == NULL)
return true;
else
return false;
}
char menu()
{
char choice;
cout << "Menu\n";
cout << "1. Add an item.\n";
cout << "2. Remove an item.\n";
cout << "3. Show the list Physically.\n";
cout << "4. Show the list Logically.\n";
cout << "5. Exit.\n";
cin >> choice;
return choice;
}
void insertAsFirstElement(node *&head, node *&last, int number)
{
node *temp = new node;
temp->number = number;
temp->next = NULL;
head = temp;
last = temp;
}
void insert(node *&head, node *&last, int number)
{
if (isEmpty(head))
insertAsFirstElement(head, last, number);
else
{
node *temp = new node;
temp->number = number;
temp->next = NULL;
last->next = temp;
last = temp;
}
}
void remove(node *&head, node *&last)
{
if (isEmpty(head))
cout << "The list is already empty.\n";
else if (head == last)
{
delete head;
head == NULL;
last == NULL;
}
else
{
node *temp = head;
head = head->next;
delete temp;
}
}
void showList(node *current)
{
if (isEmpty(current))
cout << "The list is empty\n";
else
{
cout << "The list contains: \n";
while(current != NULL)
{
cout << current->number << endl;
current = current->next;
}
}
}
void showLogic(node *current)
{
}
int main()
{
node *head = NULL;
node *last = NULL;
char choice;
int number;
do
{
choice = menu();
switch(choice)
{
case '1': cout << "Please enter a number: ";
cin >> number;
insert (head,last,number);
break;
case '2': remove(head,last);
break;
case '3': showList(head);
break;
case '4':
break;
default: cout << "System Exit\n";
}
}
while(choice != '5');
system ("pause");
return 0;
}
答案 0 :(得分:0)
一种解决方案是对链表进行排序。最简单的方法是获取列表中的值,将它们存储在容器中,然后对容器进行排序。由于您不允许更改节点的顺序(保持物理顺序),这可能是显示排序列表的最佳选择。
首先,从头到尾遍历列表 - 你的showList()函数已经做了很多工作。但是,不是显示每个节点,而是将该节点的数据放在容器中(动态数组,向量或简单数组)。如果它是一个简单的数组,请确保所有元素都有空间,并跟踪元素的数量。
然后你拿走容器,并使用任意数量的排序算法进行排序 - 最简单的是冒泡排序。然后,您将显示已排序的容器给用户。
总而言之,您实际上并未更改链接列表,甚至在很大程度上不使用链接列表。你所做的只是收集每个节点中的所有数据,将它放在一个容器中,然后所有真正的排序工作从链表转移到容器。