zoukankan      html  css  js  c++  java
  • 单向链表的反转最简单方法

    给出一个单向链表的header,要求经过处理变成反向,即原链表尾变为链表头,原链表头变成链表尾。

    例如:           10->20->30->NULL  

    处理后变为:   30->20->10->NULL

    我想,下面这应该是时间和空间方面都最简单的方法。

    struct list{
     int value;
     struct list* next;
    };

    static int reverse(struct list **pl)
    {
     struct list* header,*tmp;

     if(*pl==NULL) return 0;

     header = NULL;
     //add node to header and point to next node.
     while(*pl!=NULL) {tmp=*pl; *pl=(*pl)->next; tmp->next=header; header=tmp;}

     *pl = header;
     return 1;
    }

    测试:

    static void print_list(struct list *pl)
    {
     struct list *header = pl;
     printf("list:");
     while(header!=NULL){
      printf(" %d",header->value);
      header = header->next;
     }
     printf("/n");
    }

    int _tmain(int argc, _TCHAR* argv[])
    {
    #define NUMBER  9
     int i = 0;
     int score[NUMBER] = {10,20,30,40,50,60,70,80,90};
     struct list *header,*cur,*tmp;
     
     header = cur = NULL;
     //create list.
     while(i < NUMBER) {
      tmp = (struct list *)malloc(sizeof(struct list));
      tmp->value = score[i];
      tmp->next = NULL;
      if(i==0)
       header = cur = tmp;
      else{
       cur->next = tmp;
       cur = cur->next;
      }
      i++;
     }
     print_list(header);

     reverse(&header);
     print_list(header);

     reverse(&header);
     print_list(header);

     printf("hello,world!/n");
     getch();
     return 0;
    }


    http://blog.csdn.net/knock/archive/2010/11/26/6036703.aspx

  • 相关阅读:
    Linux 环境变量 设置 etc profile
    Linux 升级glibc-2.14 失败 我遇到的问题
    qt窗口的切换
    qt事件机制---事件范例
    qt中的事件机制
    qt的信号与槽函数
    linux下qt的安装
    qt中的udp编程
    qt中的tcp编程
    qt中的多线程
  • 原文地址:https://www.cnblogs.com/eustoma/p/2415837.html
Copyright © 2011-2022 走看看