【学习点滴-数据结构-单链表】单链表的就地逆置

题目描述:给定一个单链表,对此单链表进行就地逆置
“就地”:是指不需要开辟新的链表空间,而是在原链表的基础上调整指针的走向
/*  * 算法功能:建立单链表,对单链表进行就地逆置。  * 算法中的单链表是不带头结点的。   * 函数说明:  * 1.TransLinklist(Linklist &L):递归地对单链表进行逆置  * 2.TranLinkNoneRecur(Linklist &L) :循环地对单链表的每个节点进行逆置  * @author:xiaoq-ohmygirl  * @time :2012-06-20  **/ #include <stdio.h> #include <malloc.h> #include <stdlib.h> #define MAXNODE 5 typedef struct linkNode{     int data;     linkNode * next; }linkNode,*linkList; int createLinkList(linkList & L,int n){     L = (linkList)malloc(sizeof(linkNode));     if(!L){         return 0;     }     scanf("%d",&L->data);     L->next = NULL;     linkList p;     for(int i = n-1;i > 0;i--){          p = (linkList)malloc(sizeof(linkNode));          scanf("%d",&p->data);          p->next = L->next;          L->next = p;     }     return 1; } linkList reverseLinklist(linkList &L){    if( L == NULL || L->next == NULL){        return  L;    }    linkList node = reverseLinklist(L->next);    L->next->next = L;    L->next = NULL;    return node; } linkList reverseLinkNoneRecur(linkList L){      if(L == NULL){         return L;             }      linkList pre = NULL,cur = L,p = NULL;      while(cur->next != NULL){           p = cur->next;                      cur->next = pre;           pre = cur;           cur = p;               }      cur->next = pre;      return cur; } void visit(linkNode * node){     printf("%d->",node->data); } void getNewLine(){     printf("\n"); } //不带头结点的单链表  void traverseLink(linkList L){     linkNode* cur = L;     getNewLine();     while(cur != NULL){         visit(cur);         cur = cur->next;     }     getNewLine(); } main(){     linkList La = NULL,Lb = NULL,Lc = NULL;          createLinkList(La,MAXNODE);     printf("1:  ");     traverseLink(La);          Lb = reverseLinklist(La);     printf("2:  ");     traverseLink(Lb);          Lc = reverseLinkNoneRecur(Lb);     printf("3:  ");     traverseLink(Lc);     system("pause");     return 0; } 

   

你可能感兴趣的:(数据结构,算法,struct,null,System)