• 无头单链表反转


      1 #include <iostream>                                                                                                 
      2 
      3 using namespace std;
      4 
      5 struct node
      6 {
      7     int data;
      8     node *next;
      9 };
     10 
     11 
     12 node *list_create(void)
     13 {
     14     node *head = NULL; 
     15     node **current = &head;
     16 
     17     cout << "input value until -1" << endl;
     18 
     19     int a = 0;
     20     cin >> a;
     21     while(a != -1)
     22     {
     23         *current = new node;
     24         (*current)->next = NULL; 
     25         (*current)->data = a;
     26         current = &((*current)->next);
     27         cin >> a;
     28     }
     29 
     30     return head;
     31 }
     32 
     33 void list_print(const node *head)
     34 {
     35 
     36     while(head)
     37     {
     38         cout << "node->next is : " << head->next << " node->data is : " << head->data <<endl; 
     39         head = head->next;
     40     }
     41 }
     42 
     43 node *node_delete(node *head, int data)
     44 {
     45     if(head == NULL)
     46         return head;
     47 
     48     node *current = head;
     49     node *prev = head;
     50 
     51     if(head->data == data)
     52     {
     53         head = head->next;
     54         current->next = NULL;
     55         delete current;
     56         return head;
     57     }
     58 
     59 
     60     while(current)
     61     {
     62         if(current->data == data)
     63             break;
     64         prev = current;
     65         current = current->next;
     66     }
     67 
     68     if(current)
     69     {
     70         prev->next = current->next;
     71         current->next = NULL;
     72         delete current;
     73     }
     74 
     75     return head;
     76 }
     77 
     78 void list_delete(node *head)
     79 {
     80     node *temp;
     81     while(head)
     82     {
     83         temp = head; 
     84         head = head->next;
     85         temp->next = NULL;
     86         delete temp;
     87     }
     88 }
     89 
     90 node* list_insert(node *head, int data)
     91 {
     92     node *node_new = new node;
     93     node_new->data = data;
     94     node_new->next = NULL;
     95 
     96     if(head == NULL)
     97     {
     98         head = node_new;
     99         return head;
    100     }
    101 
    102     if(head->data >= data)
    103     {
    104         node_new->next = head;
    105         head = node_new;
    106         return head;
    107     }
    108 
    109     node *prev = head;
    110     node *current = head;
    111 
    112     while(current)
    113     {
    114         if(current->data < data)
    115         {
    116             prev = current;
    117             current = current->next;
    118             continue;
    119         }
    120         break;
    121     }
    122 
    123     node_new->next = current;
    124   prev->next=node_new;      
    125     return head;
    126 }
    127 
    128 node *list_rev(node *head)
    129 {
    130     if(NULL == head)
    131         return head;
    132 
    133     node *prev = head;
    134     node *current = head;
    135     node *next = head->next;
    136 
    137 
    138     while(next != NULL)
    139     {
    140         current = next;
    141         next = current->next;
    142         current->next = prev;
    143         prev = current;
    144     }
    145 
    146     head->next = NULL;
    147     head = current;
    148     return head;
    149 }
    150 
    151 node *create_sort(void)
    152 {
    153     node * head = NULL;
    154     int a = 0;
    155     cin >> a;
    156     while(a != -1)
    157     {
    158         head = list_insert(head, a);
    159         cin >> a;
    160     }
    161 
    162     return head;
    163 }
    164 int main(void)
    165 {
    166     node *head;
    167     int num;
    168     head = list_create();
    169     list_print(head);
    170 
    171     cout << "input the delete number" << endl;
    172     cin >> num;
    173 
    174     head = node_delete(head, num);
    175 
    176     list_print(head);
    177 
    178     list_delete(head);
    179 
    180     head = create_sort();
    181 
    182     list_print(head);
    183 
    184     head = list_rev(head);
    185 
    186     list_print(head);   
    187 
    188     list_delete(head);
    189 
    190     return 0;
    191 }                                                                                                       
    192                                                                                                
  • 相关阅读:
    大文件处理
    查看系统声卡信息
    C# 禁止程序多个实例运行
    C#绘制传感器代码
    Arcgis 属性表模糊查询
    Python筛选Excel列数据,并导出!
    c#实现:返回n到m之间的所有素数
    C# 判断一个整数是否是素数!使用bool IsPrim(int n)实现!
    打开Arcgis,ArcToolbox却打不开,还闪退!!!
    AE常用功能
  • 原文地址:https://www.cnblogs.com/openix/p/3050339.html
Copyright © 2020-2023  润新知