逆置链表java代码 链表的逆置代码

用java来编写一个单链表类的成员函数,实现对头结点的单链表就地逆置的操作

逆置有两种方法,第一是把所有节点反过来。还有一种就是改变节点中的值。

我们提供的服务有:网站设计制作、成都网站制作、微信公众号开发、网站优化、网站认证、范县ssl等。为上千多家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的范县网站制作公司

第一种情况,其实可以考虑用头插法,来实现逆置。

下面的算法是基于头插法的思想,逆置链表的,仅供参考。

LinkList anti_linklist(LinkList demo)

{

LInkList *p,*q;//work pointer

LinkList head;

head=new LinkList();

head-next=null;//init head pointer

p=demo-head-next;//make p points to the first node

if(p==null)

return null;//the linklist is null

while(p!=null)

{

q=p;

q-next=head-next;

head-next=q;

p=p-next;

}

}

线性表的就地逆置的程序代码怎么写?

1.

顺序表:

要将该表逆置,可以将表中的开始结点与终端结点互换,第二个结点与倒数第二个结点互换,如此反复,就可将整个表逆置了。算法如下:

//

表结构定义同上

void

ReverseList(

Seqlist

*L)

{

Datatype

t

;

//设置临时空间用于存放data

int

i;

for

(

i=0

;

i

L-length/2

;

i++)

{

t

=

L-data[i];//交换数据

L

-

data[

i

]

=

L

-

data[

L

-

length

-

1

-

i

]

;

L

-

data[

L

-

length

-

1

-

i

]

=

t

;

}

}

2.

链表:

也是可以用交换数据的方式来达到逆置的目的,但是由于是单链表,数据的存取不是随机的,因此算法效率太低,我们可以利用指针的指向转换来达到表逆置的目的。算法是这样的:

//

结构定义略

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

}

楼上的代码胡弄洋鬼子呢,也没实现逆置,只是逆向输出了一下!

有没有java大神,求帮忙啊用面向抽象写出将单循环链表逆置的代码,一定要用面向抽象思想,万分感谢

java中没有指针,怎么实现用户自定义链表结构?java内置的list类型是jvm里用C语言实现的。所以你最好换成C/C++完成你的作业。

实现单链表逆置

就是头插法,图片真心懒得画……

每一步实现的是这样的过程:

0(初始化)、q为每一步运算的主要节点位置,初始化为第一个;

1、r=q的后续,把q的后续记录下来;

2、q-》next=p,把q的后续指向p(也就是开始),换句话说,把q放在了最开始;

3、p=q,把新的开始设置为新插入的q(下一次循环时,他就是p了);

4、q=r,把下一步要进行运算的主要节点设置为r,也就是当前运算节点的下个节点。

相当于,一队小朋友双手搭着前一个人的肩。从第二个开始,把他挪到第一个人前面去,然后对下一个人做同样操作。

自己画画图吧,指针就是这么个东西。

用数据结构中的单链表求逆置的编程

用数据结构中的单链表求逆置的编程:

#include"iostream"

using

namespace

std;

struct

node{

int

data;

node

*next;

};

node

*p=NULL;

void

ins(int

x)

//将输入的数采用头插法放入链表中

{

node

*q=new

node;

q-data=x;

q-next=p;

p=q;

}

void

rev(int

i)

//将链表逆置并输出

{

node

*m;

//因为用了头插法放入数据所以输出的应与输入的相同

int

x;

m=p;

p=NULL;

int

j;

while(m!=NULL)

{

node

*n=m-next;

m-next=p;

p=m;

m=n;

}

cout"逆置链表后的结果:";

for(j=0;ji;j++)

{

x=p-data;

coutx;

p=p-next;

}

}

void

main()

{

int

i;

int

a[4];

cout"please

inpute

data(4个数):\n";

for(i=0;i4;i++)

cina[i];

for(i=0;i4;i++)

ins(a[i]);

rev(i);

}


分享题目:逆置链表java代码 链表的逆置代码
标题链接:http://scyanting.com/article/hhsshh.html