zoukankan      html  css  js  c++  java
  • 单链表的反转

    如何把一个单链表进行反转?

    方法1:将单链表储存为数组,然后按照数组的索引逆序进行反转。

    方法2:使用3个指针遍历单链表,逐个链接点交替使用指针改变链表的指向进行反转。

    方法3:从第3个节点到第N-1个节点,依次逐节点插入到第1个节点(head节点)之后,再将第N个节点指向head(成环),然后将此时head的下一个节点设为head,最后将原head指向NULL。

    方法4:   递归(没搞懂~)

     

    方法2:

    1. ActList* ReverseList2(ActList* head)  
    2. {  
    3. //ActList* temp=new ActList;
    4. if(NULL==head|| NULL==head->next) return head;    //少于两个节点没有反转的必要。
    5.     ActList* p;  
    6.     ActList* q;  
    7.     ActList* r;  
    8.     p = head;    
    9.     q = head->next;  
    10.     head->next = NULL; //旧的头指针是新的尾指针,next需要指向NULL
    11. while(q){  
    12.         r = q->next; //先保留下一个step要处理的指针
    13.         q->next = p; //然后p q交替工作进行反向
    14.         p = q;   
    15.         q = r;   
    16.     }  
    17.     head=p; // 最后q必然指向NULL,所以返回了p作为新的头指针
    18. return head;      

    方法3:

    1. ActList* ReverseList3(ActList* head)  
    2. {  
    3.     ActList* p;  
    4.     ActList* q;  
    5.     p=head->next;  
    6. while(p->next!=NULL){  
    7.         q=p->next;  
    8.         p->next=q->next;  
    9.         q->next=head->next;  
    10.         head->next=q;  
    11.     }  
    12.     p->next=head;//相当于成环
    13.     head=p->next->next;//新head变为原head的next
    14.     p->next->next=NULL;//断掉环
    15. return head;    

    详见:

    看图理解单链表的反转

  • 相关阅读:
    linux目录文件与系统启动(1)系统目录简介
    linux常用命令
    linux命令行
    关于Xshell6无法连接虚拟机centOS7的解决方案
    远程连接服务器和查错
    ip、端口、协议、网关、DNS
    linux分区
    linux系统补丁更新 yum命令
    VMWare网络适配器的三种模式
    springboot 配置springmvc?
  • 原文地址:https://www.cnblogs.com/zhanbiqiang/p/4109343.html
Copyright © 2011-2022 走看看