试编写算法将带头结点的单链表就地逆置,所谓“就地”是指辅助空间复杂度为O(1)

空间复杂度为O(1)

时间复杂度为O(n)

算法:


#include"initList.h"

LinkList* reverse(LinkList* L){
    LinkList *p;
    p = L->next;
    L->next = NULL;
    while(p!=NULL){
        LinkList* temp = (LinkList*)malloc(sizeof(LinkList*));//保持不断链
        temp = p->next;
        //头插法
        p->next = L->next; //p节点指向node2
        L->next = p;
        p = temp;
        //

    }
    return L;
}
int main(){
        LinkList* L = initList();
        L = reverse(L);
        printList(L);
}

 

initList.h

#include<stdio.h>
#include<iostream>
using namespace std;
typedef int Element;

typedef struct Node{
    Element data;
    struct Node *next;
}LinkList;
//初始化链表,带头节点,尾插法
LinkList* initList(){
    LinkList* rear;
    LinkList* list;
    list = (LinkList*)malloc(sizeof(LinkList));
    list->next = NULL;
    rear = list;
    for(int i=0;i<10;i++){
        LinkList *s = (LinkList*)malloc(sizeof(LinkList));
        s->data = i;
        rear->next = s;
        rear = s;
    }
    rear->next = NULL;//不赋值尾NULL,将会不断输出
    return list;
}

void printList(LinkList* L){
    while(L->next!=NULL){
        cout<<L->next->data<<" ";
        L = L->next;
    }
    cout<<endl;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章