java单链表的逆置(数据结构单链表的逆置)

今天给各位分享java链表的逆置的知识,其中也会对数据结构单链表的逆置进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

1、单链表的逆置怎么办?2、用java来编写一个单链表类的成员函数,实现对头结点的单链表就地逆置的操作3、单链表逆置算法详解4、单链表就地逆置的两种方法(递归与普通循环)5、单链表逆置

单链表的逆置怎么办?

#include stdio.h

#include stdlib.h

typedef struct node

{

int data;

struct node *next;

}Node;

//创建链表

Node *CreatList(void)

p = (Node *)malloc(sizeof(Node));

p-data = i;

if(head == NULL)

q = head = p;

else

q-next = p;

q = p;

scanf(“%d”, i);

}

p-next = NULL;

return head;

}

//链表的逆置

Node *ReverseList(Node *head)

{

Node *p, *q, *r;

p = head;

q=r=NULL;

while(p)

//输出链表

void PrintList(Node *head)

{

Node *p;

p = head;

while(p)

{

printf(“%d\n”, p-data);

p = p-next;

}

}

int main(void)

{

Node *head;

head = CreatList();

printf(“链表逆置前的数据:\n”);

PrintList(head);

head = ReverseList(head);

printf(“链表逆置后的数据:\n”);

PrintList(head);

存储表示:

① 用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不连续的)

② 链表中结点的逻辑次序和物理次序不一定相同。为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其后继结点的地址(或位置)信息(称为指针(pointer)或链(link))

链式存储是最常用的存储方式之一,它不仅可用来表示线性表,而且可用来表示各种非线性的数据结构。

java单链表的逆置(数据结构单链表的逆置)

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

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

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

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

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;

}

}

单链表逆置算法详解

首先创建一个单链表,返回一个头节点的指针( head 该头节点不为 NULL,

其次进行单链表的逆置设置。具体设置方法见下:

根据不同的长度依次进行逆置

单链表就地逆置的两种方法(递归与普通循环)

一、用递归算法

对于不带头结点的单链表(a1,a2,a3,a4,a5,a6)逆置后的结果为(a6,a5,a4,a3,a2,a1)

考虑递归算法,若只有一个结点,则直接返回,若存在两个结点(a1,a2)则需要做的操作有:

 a2-next=a1;a1-next=NULL;return a2;

a2即新的头结点,若有三个结点,则应先将子链(a2,a3)先逆置且返回该子链的新的头结点,然后把子链(a2,a3)当作一个复合结点a2’,组成新的二元组(a1,a2’)然后就可以执行前面相同的操作:a2′-next=a1;a1-next=NULL;return a3′; 即可,多个以上的结点可同理得到,

Node *Reverse(Node *head)

{

 Node *p=head;

 if(p==NULL)

  return NULL; //若是空链表,返回空

 Node *q=p-next;

 if(q==NULL)

  return p; //若只有一个结点,直接返回

 else

 head=Reverse(q);//记录子序列的新的头结点

 q-next=p; //当前结点与已经逆置的子序列看成是前后的两个结点p,q,作相应的逆置操作

 p-next=NULL;

 return head;    //返回新的子序列的头结点

}

二、用普通算法循环逆置(头插法重新建立带头结点的新链表)

参考链接:

单链表逆置

a:将单链表储存为数组,然后按照数组的索引逆序进行反转。

b:使用3个指针遍历单链表,逐个链接点进行反转。

c:从第2个节点到第N个节点,依次逐节点插入到第1个节点(head节点)之后,最后将第一个节点挪到新表的表尾。

d: 递归(相信我们都熟悉的一点是,对于树的大部分问题,基本可以考虑用递归来解决。但是我们不太熟悉的一点是,对于单链表的一些问题,也可以使用递归。可以认为单链表是一颗永远只有左(右)子树的树,因此可以考虑用递归来解决。或者说,因为单链表本身的结构也有自相似的特点,所以可以考虑用递归来解决)

pre指向前一个结点,cur指向当前结点,next指向下一个节点。

循环实现

递归实现

思路参考

关于java单链表的逆置和数据结构单链表的逆置的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月31日 12:20:22
下一篇 2024年3月31日 12:27:37

相关推荐

  • java实现抓包,java实现抓包工具

    如何通过抓包工具fiddler获取java程序的http请求 1、抓包是Fiddler的最基本的应用,以本博客为例,启动Fiddler之后,在浏览器中输入blog.csdn.net/ohmygirl 键入回车之后,在Fiddler的web session界面捕获到的HTTP请求如下图所示:各字段的详细说明已经解释过,这里不再说明。 2、打开fiddler的时…

    2024年5月12日
    3800
  • java数组从几,java中数组的用法

    java怎么让数组的数字从大到小排序? 1、int[] num = new int[str.length];//初始化一个整型数组,长度为你输入数字的个数。 2、冒泡排序,将第一个数字和后面的数字逐个比较大小,如果小于,则互换位置,大于则不动。此时,第一个数为数组中的最大数。然后再将第二个数与后面的数逐个比较。 3、//证明String的自然排序即ASCII…

    2024年5月12日
    3300
  • java获取流逝秒数,java获取当前时间毫秒

    java中date的获取以及使用 1、获取当前时间,并格式化为(年-月-日 时:分:秒)。 2、在Date类中还提供了getDay方法,用于获得Date对象代表的时间是星期几,Date类规定周日是0,周一是1,周二是2,后续的依次类推。 3、方法一:在java中可以使用Date类直接获得,但是这个方法过时了,不推荐使用。方法二:使用 java.util.Ca…

    2024年5月12日
    3300
  • java按钮从上往下,java怎么让按钮居中

    java代码执行顺序是怎样的 1、【答案】:a) 首先编写java源文件(扩展名为.java的文本文档)。b) 用javac命令把源文件编译成字节码文件(.class文件)c) 用java命令执行字节码文件。 2、a=1;b=2;c=3;这三条语句就是跟顺序无关的,java会根据自己的需要进行优化来执行。 3、执行顺序如下:初始化-条件表达式-语句-增量-条…

    2024年5月12日
    3900
  • java编程修炼内功,java编程训练

    如何学好JAVA并提高自己? 1、保持对java的兴趣 兴趣是学习最好的老师,同时兴趣也是提高学习效率的一大法宝。 2、第一:正确理解Java的各种“抽象”。学习Java就是学习各种“抽象”,包括类、接口和抽象类等,不同层次的抽象意味着不同的作用。第二:注重知识结构的全面性。 3、综合各方面考虑,还是Java培训比较好,因为自学Java你各种Java知识很难…

    2024年5月12日
    3200
  • call类的java文件,java callinvoke

    Java进阶:在SE6中调用编译器的两种方法[2] (5)安全:Java用来设计网路和分布系统,这带来了新的安全问题,Java可以用来构建防病毒和防攻击的System.事实证明Java在防毒这一方面做的很优秀。 在Java语言中,使用关键字public、private等来定义方法的可见性并指定返回类型。总结:def是汇编语言和编程语言中常见的关键字,用于定义…

    2024年5月12日
    3100
  • java栈先进先出,js栈先进后出

    谁能解释一下java中的栈内存和堆内存 栈(stack)是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈,程序员不能直接地设置栈。 堆内存主要作用是存放运行时创建(new)的对象。 管理方式不同 堆是由程序员通过调用系统库函数来管理内存,所以管理不力就会出现常说的内存泄漏。栈是由计算机系统分配内存而且系统有专门的寄存器存储栈指针。生长…

    2024年5月12日
    3800
  • javanative同步,java中同步方法

    Android中能不能在native层和Java层共享数据? 而在内核层,由于内存共享的性质,对应的ServiceManager(Native层)只有一个,每个Java层的ServiceManager都会与这个唯一的Native层ServiceManager建立引用关系。 两者最大的区别在于 存储媒介的不同,Serializable 使用 I/O 读写存储在…

    2024年5月12日
    2700
  • c语言链表和二叉树,二叉树链表的建立c语言

    二叉链表表示二叉树,复制一颗二叉树,如何用C语言算法设计,希望答案正确… 中序遍历二叉树从而得到二叉树的深度以及节点数目 / if(countnodes(pow(2,deep)-1))printf(这不是一棵满二叉树。);else printf(这是一棵满二叉树。 语句较多,但比较简单,所以不一一介绍了,难理解的i主要编程思想,你可以输入abc*…

    2024年5月12日
    3800
  • java后台开发pdf,javapdf

    如何用java进行移动端后台开发 安装Java开发环境(JDK):在安装Android Studio之前,你需要先安装JDK,它是Java开发环境的基础组件。 网页开发 目前Java编程技术的应用越来越普遍,也越来越完善,在Java培训学习中我们就可以看的出来Java不仅可以做后端开发同时也可以做前端开发,在Java培训机构的课程内容中对于html、css、…

    2024年5月12日
    3400

发表回复

登录后才能评论



关注微信