WHCSRL 技术网

CG.单链表的排序与删除

 

【问题描述】输入一个整数序列,以单链表作为存储结构,将单链表中存储最大整数值的结点删除,然后按照链表从头到尾的顺序,将单链表中的整数存入顺序表,按照从大到小的顺序对顺序表排序,并输出顺序表。

【输入形式】整数序列,以空格做分隔,序列最多包含10个元素

【输出形式】整数序列,以空格做分隔

【样例输入】4 6 8 9 2 3

【样例输出】8 6 4 3 2
【样例说明】

  1. #include<iostream>
  2. #include<cstdlib>
  3. #include<cstdio>
  4. using namespace std;
  5. typedef struct node
  6. {
  7. int data;
  8. struct node* next;
  9. }node;
  10. node *Creatlist(){
  11. node *head = new node[10];
  12. head->next = NULL;
  13. node* pre = head;;
  14. int n;
  15. char ch=0;
  16. while (ch != ' ')
  17. {
  18. cin >> n;
  19. ch = getchar();
  20. node* p=new node;
  21. p->data = n;
  22. pre->next = p;
  23. pre = p;
  24. }
  25. pre->next = NULL;
  26. return head;
  27. }
  28. void Dete(node *head){
  29. node *pre = head;
  30. node*p = pre->next;
  31. int max = -99999;
  32. while(p!=NULL)
  33. {
  34. if (p->data > max)
  35. {
  36. max = p->data;
  37. }
  38. p = p->next;
  39. }
  40. p = pre->next;
  41. while (p != NULL)
  42. {
  43. if (p->data == max)
  44. {
  45. pre->next = p->next;
  46. p = pre->next;
  47. }
  48. p = p->next;
  49. pre = pre->next;
  50. }
  51. }
  52. void sortshow(node *head)
  53. {
  54. int temp;
  55. for (node *pre = head->next; pre; pre = pre->next)
  56. {
  57. for (node *p = pre->next; p; p = p->next)
  58. {
  59. if (pre->data < p->data) {
  60. temp = pre->data;
  61. pre->data = p->data;
  62. p->data = temp;
  63. }
  64. }
  65. }
  66. node *pre = head->next;
  67. while (pre != NULL)
  68. {
  69. cout << pre->data << " ";
  70. pre = pre->next;
  71. }
  72. }
  73. int main()
  74. {
  75. node *head = Creatlist();
  76. Dete(head);
  77. sortshow(head);
  78. return 0;
  79. }

推荐阅读