原创转载请注明出处:http://agilestyle.iteye.com/blog/2360694
Recursive Idea
Reverse(Head -> Remaining List)
=>
Reverse(Remaining List) -> Head
Example:
Reverse(1->2->3->4->5)
=>
Reverse(2->3->4->5) -> 1
Demo
package org.fool.java.collections; public class ReverseLinkedListTest { public static void main(String[] args) { List l = new List(1); l.next = new List(2); l.next.next = new List(3); l.next.next.next = new List(4); l.next.next.next.next = new List(5); System.out.println("Original List: " + l.toString()); l = reverse(l); System.out.println("Reversed List: " + l.toString()); } public static List reverse(List l) { // firstly check if l is empty or only has one element then return if (l == null || l.next == null) { return l; } // otherwise, use recursive method to process List remainingReverse = reverse(l.next); // step 1: need to update the tail of remaining reverse as head l l.next.next = l; // this (l.next) is the key to get the tail in constant time // set l.next to NULL after that! Otherwise it's causing cycles in list l.next = null; // step 2: return the reverse list return remainingReverse; } } class List { int value; List next; public List(int value) { this.value = value; } @Override public String toString() { List current = this; String output = ""; while (current != null) { output += current.value + " -> "; current = current.next; // increment the pointer index current } return output + "NULL"; } }
Note:
Console Output
Reference
https://www.youtube.com/watch?v=j5m6rRszzEQ&list=PLlhDxqlV_-vkak9feCSrnjlrnzzzcopSG
相关推荐
java入门 java_leetcode题解之206_Reverse_Linked_List
c++ C++_leetcode题解之206_Reverse_Linked_List.cpp
python python_leetcode题解之206_Reverse_Linked_List.py
javascript js_leetcode题解之92-reverse-linked-list-ii.js
Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K=3, then you must output 3→2→1→6→5→...
c语言基础 c语言_leetcode题解之0092_reverse_linked_list_ii.zip
在计算机科学领域,数据结构是基础且至关重要的概念,它为高效地存储和处理数据提供了方法。本话题聚焦于一种常见的线性数据结构——单链表,并探讨如何对其进行逆序输出。逆序输出单链表涉及到对链表节点顺序的反转...
leetcode 不会 Leetcode Solutions in Java Linked List Linked List ...a linked list, ...a ...快慢指针法,块指针从head.next开始,慢指针从head开始,快指针每次移动两格,...reverseList(ListNode head) 三个指针,依次往后
7. **逆转线性链表(Reverse a Linked List)**:逆转链表的算法通过三个指针p、q、r实现。首先设置p为链表头,q为p的下一个节点,p的next指针设为null,然后在循环中不断更新p、q、r,使得q指向p的下一个节点,p的...
进行一次遍历,把第m到n个元素进行翻转,即依次插入到第m个节点的头部。这个题还是有意思的。建议后面再多做几遍。Python代码如下:self.next = No
2. 反转链表(Reverse Linked List) 反转链表是将链表的方向反转,即将链表的头节点变为尾节点,尾节点变为头节点。这种操作可以用于解决一些特殊的问题,例如,反转链表以满足某些算法的要求。 知识点:反转链表...
C#,递归方法实现双向链表(Doubly Linked List)的反转(Reverse)算法与源代码 递归算法的执行过程分递推和回归两个阶段。在递推阶段,把较复杂的问题(规模为n)的求解推到比原问题简单一些的问题(规模小于n)的...
`Reverse`方法则需要两个指针,一个记录当前节点,另一个记录前一个节点,依次交换节点的`Next`指针,直到遍历完整个链表。 项目的实现细节可能包含异常处理,如确保插入和删除操作时不会超出链表范围,或者在空...
build_reverse_linked_list 函数: 接收一个列表 data,将其逆序构建成链表。 首先使用 data.reverse() 反转输入的数据。 创建一个虚拟头节点 dummy,然后遍历反转后的数据,依次创建新的节点并连接成链表。 返回...
本课件“Chapter4 Array and Linked list Exercise”聚焦于两种基础且重要的数据结构:数组(Array)和链表(Linked list),这些都是编程中不可或缺的基础知识。 1. **数组**: 数组是一种线性数据结构,它包含...
You are given two non-empty linked lists ... Add the two numbers and return it as a linked list. You may assume the two numbers do not contain any leading zero, except the number 0 itself. java AC版本
链表反转(Linked List Reverse) 链表是一种常用的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表反转是指将链表中节点的指针方向逆转。例如,将链表`1->2->3->4`反转为`4->3->2->...
关于 这个项目包含了一个蛇游戏,但是有点扭曲。 在这里,我已经实现了反向链接算法,并且可以类似地用于可视化相同的算法。 可用脚本 在项目目录中,可以运行: npm start 在开发模式下运行该应用程序。...
**题目描述**:给定一个单链表L的头结点head,将其重新排列为A->B->A->B->...的形式。 **解决方案**:首先找到链表的中点(使用快慢指针),然后反转后半部分链表,最后交替合并两段链表。 ```python def reorder...
92-反转链表II:reverse-linked-listt-ii 141-环形链表:linked-list-cycle 142-环形链表:linked-list-cycle-ii 160-相交链表:intersection-of-two-linked-lists 206-反转一个单链表:reverse-linked-list 20-有效的...