当前位置:   article > 正文

【学习点滴-数据结构-单链表】单链表的就地逆置_单链表的就地逆置的函数是什么

单链表的就地逆置的函数是什么
  1. 题目描述:给定一个单链表,对此单链表进行就地逆置
  2. “就地”:是指不需要开辟新的链表空间,而是在原链表的基础上调整指针的走向
  1. /*
  2.  * 算法功能:建立单链表,对单链表进行就地逆置。
  3.  * 算法中的单链表是不带头结点的。 
  4.  * 函数说明:
  5.  * 1.TransLinklist(Linklist &L):递归地对单链表进行逆置
  6.  * 2.TranLinkNoneRecur(Linklist &L) :循环地对单链表的每个节点进行逆置
  7.  * @author:xiaoq-ohmygirl
  8.  * @time :2012-06-20
  9.  **/
  10. #include <stdio.h>
  11. #include <malloc.h>
  12. #include <stdlib.h>
  13. #define MAXNODE 5
  14. typedef struct linkNode{
  15.     int data;
  16.     linkNode * next;
  17. }linkNode,*linkList;
  18. int createLinkList(linkList & L,int n){
  19.     L = (linkList)malloc(sizeof(linkNode));
  20.     if(!L){
  21.         return 0;
  22.     }
  23.     scanf("%d",&L->data);
  24.     L->next = NULL;
  25.     linkList p;
  26.     for(int i = n-1;i > 0;i--){
  27.          p = (linkList)malloc(sizeof(linkNode));
  28.          scanf("%d",&p->data);
  29.          p->next = L->next;
  30.          L->next = p;
  31.     }
  32.     return 1;
  33. }
  34. linkList reverseLinklist(linkList &L){
  35.    if( L == NULL || L->next == NULL){
  36.        return  L;
  37.    }
  38.    linkList node = reverseLinklist(L->next);
  39.    L->next->next = L;
  40.    L->next = NULL;
  41.    return node;
  42. }
  43. linkList reverseLinkNoneRecur(linkList L){
  44.      if(L == NULL){
  45.         return L;       
  46.      }
  47.      linkList pre = NULL,cur = L,p = NULL;
  48.      while(cur->next != NULL){
  49.           p = cur->next;           
  50.           cur->next = pre;
  51.           pre = cur;
  52.           cur = p;         
  53.      }
  54.      cur->next = pre;
  55.      return cur;
  56. }
  57. void visit(linkNode * node){
  58.     printf("%d->",node->data);
  59. }
  60. void getNewLine(){
  61.     printf("\n");
  62. }
  63. //不带头结点的单链表 
  64. void traverseLink(linkList L){
  65.     linkNode* cur = L;
  66.     getNewLine();
  67.     while(cur != NULL){
  68.         visit(cur);
  69.         cur = cur->next;
  70.     }
  71.     getNewLine();
  72. }
  73. main(){
  74.     linkList La = NULL,Lb = NULL,Lc = NULL;
  75.     
  76.     createLinkList(La,MAXNODE);
  77.     printf("1:  ");
  78.     traverseLink(La);
  79.     
  80.     Lb = reverseLinklist(La);
  81.     printf("2:  ");
  82.     traverseLink(Lb);
  83.     
  84.     Lc = reverseLinkNoneRecur(Lb);
  85.     printf("3:  ");
  86.     traverseLink(Lc);
  87.     system("pause");
  88.     return 0;
  89. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/680899
推荐阅读
相关标签
  

闽ICP备14008679号