void Inverse(LinkList &L)
{
LNode p, q;
p = L->next; /记录第一个结点地址/
L->next = NULL; /把链表设置成空表/
while (p != NULL) /依次按头插法将各结点插入,就实现了逆置/
{
q = p; /用q记录待插入结点地址/
p = p->next; /用p记录待插入结点的后继结点地址//
q->next = L->next; /将q(待插入结点)插入到头结点的前面/
L->next = q; /将新插入结点作为新的头/
}
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
typedef struct point{
int data;
struct point next;
} node;
node nz(node z) /反转z/
{
node t1=NULL,t2;
while (z)
{
t2=t1;
t1=z;
z=z->next ;
t1->next =t2;
}
return t1;
}
示例程序:
//---------------------------------------------------------------------------
#include <stdioh>
#include <stdlibh>
typedef struct point{
int data;
struct point next;
} node;
node nz(node z) /反转/
{
node t1=NULL,t2;
while (z)
{
t2=t1;
t1=z;
z=z->next ;
t1->next =t2;
}
return t1;
}
node creat(void) /输入整数以建表,-1结束输入/
{
node n=NULL;
int i;
scanf("%d",&i);
if (i!=-1) {
n=malloc(sizeof(node));
n->data =i;
n->next =creat();
}
return n;
}
void wr(node n) /输出表/
{
while (n!=NULL)
{
printf("%d\t",n->data );
n=n->next ;
}
}
int main(void)
{
node a=creat();
wr(a);
putchar(10);
a=nz(a);
wr(a);
return 0;
}
//---------------------------------------------------------------------------
#include <stdioh>
#include <stdlibh>
#include <timeh>typedef struct Node
{
int data;
struct Node next;
}Node, LinkList;void ListReverse(LinkList L)
{
Node p,q;
p=L->next;
L->next=NULL;
while(p)
{
q=p->next;
p->next=L->next;//头插法
L->next=p;
p=q;
}
}/逆置函数/void InitList(LinkList L)
{
L = (LinkList)malloc(sizeof(Node));
(L)->next = NULL;
}void CreateListHead(LinkList L)//头插法创建
{
Node s;
int i=0;
srand((unsigned)time(NULL));
while(i<10)
{
s=(LinkList)malloc(sizeof(Node));
s->data=rand()%99+10;
s->next=L->next;
L->next=s;
i++;
}
}void DestoryList(LinkList L)
{
Node p; p = L->next;
while(p)
{
L->next = p->next;
free(p);
p = L->next;
}
free(L);
}void TraverseList(LinkList L)//显示
{
Node p;
p = L->next;
while(p)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}
int main()
{
LinkList L;
InitList(&L);
CreateListHead(L);
TraverseList(L); ListReverse(L);
printf("逆置后:\n");
TraverseList(L); DestoryList(L); return 0;
}
自己在前面声明结构体
void linklist_oppse(LinkList &L)
{
LinkList p,q;
p=L;
p=p->next;
L->next=NULL;
while(p){
q=p;
p=p->next;
q->next=L->next;
L->next=q;
}
}
以上就是关于试写一算法对单链表实现就地逆置全部的内容,包括:试写一算法对单链表实现就地逆置、求单链表的逆置的最快算法、【数据结构题】设计一个算法,要求用栈结构将带头结点的单链表逆置。写出完整的程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)