大佬的算法
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;
}