`

java逆转单链表

阅读更多

节点类:
//节点类
class Node{
	public Node(int value){
		this.value = value;
	}
	public Node(){
	}
	int value;
	Node next;
}

初始化链表
//初始化一个有序的单链表
	public Node initList(){
		Node head = new Node();
		Node n1 = new Node();
		Node n2 = new Node();
		Node n3 = new Node();
		Node n4 = new Node();
		Node n5 = new Node();
		n1.value = 1;
		n2.value = 2;
		n3.value = 3;
		n4.value = 4;
		n5.value = 5;
		n1.next = n2;
		n2.next = n3;
		n3.next = n4;
		n4.next = n5;
		head.next = n1;
		return head;
	}

非递归的逆转
//单链表逆转,非递归
	public Node reverseList(Node node){
		if (null == node) {   
            return node;   
        }
		//上一个节点
        Node upper = null;   
        //当前节点
        Node cur = node.next;
        //下一个节点
        Node next = null;   
        while (null != cur) {   
            next = cur.next;   
            cur.next = upper;
            upper = cur;   
            cur = next;   
        }
        //反转结束后,upper引用指向原链表的最后一个节点,即反转后的第一个节点
        node = upper;   
           
        return node;   
	}

递归的逆转
public Node reverse(Node node){
		if(node==null || node.next == null)return node;
		Node next = node.next;
//将node的next清空,否则在递归return到最上层时要逆转的原链表的最后一个节点的next会指向原来的头节点,而原来的头节点的next又指向原来的第一个节点,即逆转后的最后一个节点,会造成无限的重复链表
		node.next = null;
		Node returnNode = reverse2(next);
		next.next = node;
		return returnNode;
	}

打印链表:
//打印单链表
	public void printList(Node head){
		String str = "";
		for(Node n = head;n!=null;){
			str = str + " " + n.value;
			n = n.next;
		}
		System.out.println(str);
	}

调用:
Test t = new Test();
		Node head = t.initList();
		System.out.println("逆转前:");
		t.printList(head.next);
		System.out.println("逆转后:");
		t.printList(t.reverseList(head));

分享到:
评论

相关推荐

    java 实现单链表逆转详解及实例代码

    Java单链表逆转是指通过编写算法将链表中的节点顺序颠倒,即原链表头节点变为尾节点,原尾节点变为头节点。这种操作在数据结构学习和实际应用中非常重要,可以解决很多与链表节点顺序相关的问题。在Java中实现单链表...

    单链表的创建于逆转

    本主题将深入探讨如何在C++中创建单链表以及如何逆转单链表。 首先,我们来看一下如何创建一个单链表。在C++中,我们可以定义一个结构体或类来表示链表节点,通常包含两个部分:数据域(用于存储数据)和指针域...

    逆转线性单链表.doc

    在计算机科学中,逆转线性单链表是一种常见的操作,它能改变链表中节点的顺序,使得原本的尾部节点变为头部,而原来的头部节点变为尾部。这个过程对于理解和实现链表操作非常有帮助。 在给定的代码中,我们看到一个...

    PAT-单链表分段逆转

    在探讨单链表分段逆转的问题前,需要先理解单链表的基本概念。单链表是由一系列节点构成的数据结构,每个节点包含两个部分:一部分是存储数据元素的值,另一部分是指向下一个节点的指针。在单链表中,节点之间通过...

    单链表的逆转求和

    单链表的逆转求和,根据输入,完成单链表的建立操作,然后实现单链表的逆转,输出逆转之后各几点的元素值,最后输出所有元素之和。

    单链表逆转

    使用C++描述的单链表处理程序源代码,可以实现单链表的逆转等操作。CodeBlocks下调试通过。

    单链表逆转操作

    单链表逆转操作,在笔试中经常可见 1实现整体逆转 2.实现相邻元素逆转

    使一个循环单链表逆转

    在实际操作中,你可以创建一个循环单链表,插入一些节点,然后调用`reverse()`方法逆转链表,最后打印出逆转前后的链表,以验证逆转操作的正确性。 这个实验涵盖了链表数据结构、模板编程、动态内存管理和指针操作...

    03016202万玥汝第一次实验报告_单链表逆转_单链表后插入新节点_删除结点_查找结点_

    在本实验中,我们探讨了单链表的几个关键操作:逆转链表、在指定位置后插入新节点、删除特定节点以及查找节点。 首先,让我们深入理解单链表逆转的过程。逆转链表的算法涉及到改变每个节点的指针方向,使其从原本...

    O n 复杂度实现单链表的逆转

    一个C程序 实现了单链表的逆序 且复杂度为O n

    3_单链表的逆转.cpp

    3_单链表的逆转.cpp

    单链表的插入、删除、逆转等实现

    ### 单链表的基本操作与实现 #### 一、单链表的概念与结构定义 单链表是一种线性数据结构,其中每个元素都是一个独立的对象,称为节点(Node)。每个节点包含两部分:一部分用于存储数据(Data),另一部分则包含...

    单链表逆置

    ### 单链表逆置知识点解析 #### 一、单链表基础概念 单链表是一种常见的线性数据结构,其特点是每个元素包含一个指向下一个元素的指针。这种结构使得在链表中插入和删除元素变得非常方便,因为只需要改变相关节点...

    线性链表的逆转(可通过编译)

    包括单链表的输入,输出和逆转后的输出。编译通过。

    纯C语言单链表的逆转,前驱插入,后驱插入,排序(适用于节点数据大,避免对数据拷贝的排序,可以对节点数据较大的程序提升性能)

    本主题关注的是单链表的操作,包括逆转、前驱插入和后驱插入,以及一种特殊的排序方法,特别适用于节点数据较大,避免了对数据进行拷贝的情况,从而提升了程序性能。下面我们将详细探讨这些知识点。 1. **单链表**...

    单链表的创建,逆转,寻找中位数,倒数第m个节点

    c++实现单链表的创建,逆转,以及找到寻找中间节点,用最小的空间找到倒数第m个节点

    单向链表逆转单向链表逆转单向链表逆转

    "单向链表逆转" 在计算机科学中,链表是一种基本的数据结构,它是一种动态的数据结构,可以存储大量的数据。单向链表是一种特殊的链表,每个结点只有一个指针,指向下一个结点。单向链表逆转是指将链表的结点顺序...

Global site tag (gtag.js) - Google Analytics