zoukankan      html  css  js  c++  java
  • 链表逆序

    实现链表逆序的功能

    下面是实现链表逆序的函数:

     1 /*
     2  * 把head指针指向的链表逆序
     3  * author:rio_2607
     4  */
     5 void inverse(struct node *head)
     6 {
     7     struct node *current = head;
     8     struct node *current_next = NULL;
     9 
    10     //如果是一个空链表或者只有一个元素,则直接返回
    11     if(NULL == head || NULL == current->next)
    12         return;
    13 
    14     current_next = current->next;
    15 
    16     while(current_next->next != NULL)
    17     {
    18         struct node *temp = current_next->next;
    19         current_next->next = current;//逆序指针
    20 
    21         current = current_next;//两个指针都往后移一个
    22         current_next = temp;
    23     }
    24 
    25     //把最后两个节点逆序
    26     current_next->next = current;
    27     head->next = NULL;
    28 
    29     head = current_next;//把头指针指向最后一个指针
    30 
    31 
    32     //打印输出结果
    33     struct node *t = head;
    34     while(t != NULL)
    35     {
    36         cout << t->data << "  ";
    37         t = t->next;
    38     }
    39 
    40 }

    其中,struct node的定义是:

    1 struct node {
    2     int data;
    3     struct node *next;
    4 };

    下面是测试代码:先输入链表的长度,在依次输入每个链表的数据域的数据,然后分别打印输出逆序前后的数据:

     1 int main()
     2 {
     3     struct node *head = NULL;
     4     struct node *current = NULL;
     5     int number;
     6     cout << "please enter the number :" ;
     7     cin >> number;
     8     for(int i = 1;i <=number;++i)
     9     {
    10         struct node *temp = (struct node*)new struct node;
    11         cin >> temp->data;
    12         temp->next = NULL;
    13 
    14         if(NULL == head)
    15             head = temp;
    16         else
    17             current->next = temp;
    18 
    19         current = temp;
    20 
    21     }
    22 
    23 
    24     //打印数据
    25     struct node *t = head;
    26     cout << "Before inverse:" << endl;
    27     while(t != NULL)
    28     {
    29         cout << t->data << "  ";
    30         t = t->next;
    31     }
    32 
    33     cout << endl;
    34 
    35     cout << "After inverse:" << endl;
    36 
    37     inverse(head);//链表逆序
    38 
    39     return 0;
    40 }

    运行结果如下所示:

  • 相关阅读:
    mysql笔记
    ssh学习笔记
    oracle数据向历史表数据迁移————procedure
    关于避免模糊查询索引时效问题
    css圣杯布局和双飞翼布局篇
    什么是hasLayout
    高度自适应的水平垂直居中布局
    MAC的GIF动图录屏软件LICECAP
    sublime text 快捷键shortcuts
    为表格合并边框的样式
  • 原文地址:https://www.cnblogs.com/rio2607/p/4439724.html
Copyright © 2011-2022 走看看