在Java中反转链接列表
时间:2020-02-23 14:34:23 来源:igfitidea点击:
在本教程中,我们将看到如何在Java中反转链接列表。
可以有两个解决方案来反转Java中的链接列表
- 迭代
- 递归
迭代
其逻辑是:
- 有三个节点。比如:previousNode、currentNode,nextNode
- currentNode为起始节点时,previousNode为空
- 将 currentNode.next 赋值给 previousNode 以反转链接。
- 在每次迭代中,将currentNode和previousNode移动1个节点。
public static Node reverseLinkedList(Node currentNode)
{
//For first node, previousNode will be null
Node previousNode=null;
Node nextNode;
while(currentNode!=null)
{
nextNode=currentNode.next;
//reversing the link
currentNode.next=previousNode;
//moving currentNode and previousNode by 1 node
previousNode=currentNode;
currentNode=nextNode;
}
return previousNode;
}
Java程序撤消链接列表将是:
package org.igi.theitroad;
public class LinkedList{
private Node head;
private static class Node {
private int value;
private Node next;
Node(int value) {
this.value = value;
}
}
public void addToTheLast(Node node) {
if (head == null) {
head = node;
} else {
Node temp = head;
while (temp.next != null)
temp = temp.next;
temp.next = node;
}
}
public void printList(Node head) {
Node temp = head;
while (temp != null) {
System.out.format("%d ", temp.value);
temp = temp.next;
}
System.out.println();
}
//Reverse linkedlist using this function
public static Node reverseLinkedList(Node currentNode)
{
//For first node, previousNode will be null
Node previousNode=null;
Node nextNode;
while(currentNode!=null)
{
nextNode=currentNode.next;
//reversing the link
currentNode.next=previousNode;
//moving currentNode and previousNode by 1 node
previousNode=currentNode;
currentNode=nextNode;
}
return previousNode;
}
public static void main(String[] args) {
LinkedList list = new LinkedList();
//Creating a linked list
Node head=new Node(5);
list.addToTheLast(head);
list.addToTheLast(new Node(6));
list.addToTheLast(new Node(7));
list.addToTheLast(new Node(1));
list.addToTheLast(new Node(2));
list.printList(head);
//Reversing LinkedList
Node reverseHead=reverseLinkedList(head);
System.out.println("After reversing");
list.printList(reverseHead);
}
}
运行上面的程序,我们将获取以下输出:
5 6 7 1 2 After reversing 2 1 7 6 5
递归
基本情况:基本情况为此为null为null或者node.next为null
对于递归解决方案,将上述程序的ReverselinkedList替换为以下函数
public static Node reverseLinkedList(Node node) {
if (node == null || node.next == null) {
return node;
}
Node remaining = reverseLinkedList(node.next);
node.next.next = node;
node.next = null;
return remaining;
}

