该程序是一个非递归过程以O(N)时间反转单链表

大佬的算法

 List ReverseList( List L )
{
    Position CurrentPos, NextPos, PreviousPos;
    PreviousPos = NULL;
    CurrentPos= L;
    NextPos= L->Next;
    while( NextPos != NULL )
    {
        CurrentPos->Next = PreviousPos;
        PreviousPos = CurrentPos;
        CurrentPos = NextPos;
        NextPos = NextPos->Next;
    }
     CurrentPos->Next = PreviousPos;
     return CurrentPos;
}

以下是小白的算法,虽然思路是一样的

// 该程序是一个非递归过程以O(N)时间反转单链表
#include <stdio.h>
#include <stdlib.h>
#include "list.h"
#include "list.c"
#define NNUM 100

List reverse(List L);
List unshift(Position q, List L);

int main()
{  
    List L = NULL;
    int i;
    L = (List)malloc(sizeof(struct Node));
    L = MakeEmpty(L);

    for (i = 1; i <= NNUM; i++)
        AddUnit(i, L);

   L = reverse(L);

   PrintList(L);
    return 0;
}

List reverse(List L)
{
    Position p, q;
    List result = L;

    p = L->Next;
    result->Next = NULL;
    while(p != NULL)
    {
        q = p;
        p = p->Next;
        q->Next = NULL;

        result = unshift(q, result);
         
    }

    return result;
}



List unshift(Position q, List L)
//在链表头元素前加元素
{
    Position p;

    p = L->Next;

    if(L->Next == NULL)
    {
        L->Next = q;
        q->Next = NULL;
    }else{
        L->Next = q;
        q->Next = p;
    }

    return L;
}
发布了40 篇原创文章 · 获赞 7 · 访问量 1057

猜你喜欢

转载自blog.csdn.net/BobDay/article/details/104772478