请高手帮忙解答~~

来源:百度知道 编辑:UC知道 时间:2024/06/17 14:50:57
试用单链表作为存储结构,实现将线性表(a0,a1,...an-1)就地逆置的操作.
LinkList ReverseList( LinkList head )
{
// 将head 所指的单链表逆置
ListNode *p ,*q ;//设置两个临时指针变量
if( head->next && head->next->next)
{
//当链表不是空表或单结点时
p=head->next;
q=p->next;
p -> next=NULL; //将开始结点变成终端结点

while (q)
{ //每次循环将后一个结点变成开始结点
p=q;
q=q->next ;
p->next = head-> next ;
head->next = p;
}
return head;
}
return head; //如是空表或单结点表,直接返回head
}
这个是算法,我想问的是.我需要个完整的程序来验证算法.
刚刚学数据结构,不是很理解,最好有注释便于理解.
希望高手解决.

#include <stdio.h>
#include <malloc.h>

//结点仅取一个int型值
typedef struct ListNode
{
int nnode;
}ListNode;

typedef struct LK
{
ListNode node;
struct LK *pnext;
}LK,*LinkList;

LinkList ReverseList( LinkList head )
{
// 将head 所指的单链表逆置
LinkList p ,q ;//设置两个临时指针变量
if( head->pnext && head->pnext->pnext)
{
//当链表不是空表或单结点时
p=head->pnext;
q=p->pnext;
p -> pnext=NULL; //将开始结点变成终端结点

while (q)
{ //每次循环将后一个结点变成开始结点
p=q;
q=q->pnext ;
p->pnext = head-> pnext ;
head->pnext = p;
}
return head;
}
return head; //如是空表或单结点表,直接返回head
}

int main()
{
int ni = 0;
LinkList phead = NULL, ptemp = NULL, pnode = NULL;

phead = (LinkList)malloc(sizeof(LK));
ptemp = phead;

printf("输入4个链