链表 | 原地逆置链表

王道P37 T5


所谓原地逆置,就是空间复杂度为O(1)的将链表反转。

实现函数:

void reverse(LinkList* L){
    LinkList* after=NULL;
    LinkList* pre=NULL;
    LinkList* p=L->next;
    while(p){
        after=p->next;
        p->next=pre;
        L->next=p;
        pre=p;
        p=after;
    }
}

完整代码:

#include <cstdio>
#include <stdlib.h>

using namespace std;

typedef struct LinkList{
    int data;
    struct LinkList* next=NULL; 
    LinkList(){    }
    LinkList(int x){    
        data=x;
    }
}LinkList;

LinkList*  build_list(int * arr,int n){
    int i;
    LinkList* L=new LinkList;
    LinkList* pre=L;
    for(i=0;i<n;i++){
        LinkList* p=new LinkList(arr[i]);
        pre->next=p;
        pre=p;
    }
    return L;
}

void reverse(LinkList* L){
    LinkList* after=NULL;
    LinkList* pre=NULL;
    LinkList* p=L->next;
    while(p){
        after=p->next;
        p->next=pre;
        L->next=p;
        pre=p;
        p=after;
    }
}

void show_list(LinkList* L){
    LinkList * p=L->next;
    while(p){
        printf("%d ",p->data);
        p=p->next;
    }
    puts("");
}

int main(){
    int arr[10]={1,2,3,4,5,6,7,8,9,0};
    LinkList * L=build_list(arr,10);
//    printf("%d ",L->next->data);
    show_list(L);
    reverse(L);
    show_list(L);
}
 
View Code
原文地址:https://www.cnblogs.com/TQCAI/p/8387843.html