试写一算法对单链表实现就地逆置

试写一算法对单链表实现就地逆置,第1张

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;

}

}

以上就是关于试写一算法对单链表实现就地逆置全部的内容,包括:试写一算法对单链表实现就地逆置、求单链表的逆置的最快算法、【数据结构题】设计一个算法,要求用栈结构将带头结点的单链表逆置。写出完整的程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9814231.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存