方法1:就地逆置由函数Reverse()完成,其算法思想:修改指针,设原表中pre为p的前驱,将其修改成pre为p的后继,即p->next=pre,当然这时无法求p原来的后继,所以可以在修改指针前,先用q暂存p原来的后继即可。
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
#define ARRAYSIZE 20
typedef struct LNode
{
char data[20];
struct LNode *next;
}LNode,*LinkList;
int InitList(LinkList &L)//生成单循环链表
{
int i,j,t,flag,k=0;
LinkList p=NULL,q=NULL;
char str[ARRAYSIZE]={NULL};
L=(LinkList)malloc(sizeof(LNode));L->next=NULL;
strcpy(L->data,"-1");//链表头结点数据域值为 -1
srand((unsigned)time(NULL));
for(i=0;i<9;++i)//逆位序输入 n 个元素的值,建立带头结点的单链表 L
{
k=0;t=