流程图:
代码示例
单向列表反转代码
public static class Node{
public int value;
public Node next;
public Node(int value){
this.value = value;
}
}
public static Node reverseNode(Node head){
Node next = null;
Node prev = null;
while (head != null){
next = head.next;
head.next= prev;
prev = head;
head = next;
}
return prev;
}
单向链表反转包含测试的代码
package com.ss.class02;
import java.util.Random;
/**
* <p>
* 反转列表
* </P>
*
* @author: zhangss
* @since: 2021-01-07
**/
public class ReverseList {
/**
* 单向链表
*/
public static class Node{
public int value;
public Node next;
public Node(int value){
this.value = value;
}
}
/**
* 双向链表
*/
class DoubleNode{
public int value;
public DoubleNode prevNode;
public DoubleNode nextNode;
public DoubleNode(int value){
this.value = value;
}
}
/**
* 反转单向链表,反转以后返回新的头部
* @param head
* @return
*/
public static Node reverseNode(Node head){
Node next = null;
Node prev = null;
while (head != null){
next = head.next;
head.next= prev;
prev = head;
head = next;
}
return prev;
}
/**
* 生成单向链表
* @return
*/
public static Node generateNode(){
Random random = new Random();
Node head = new Node(random.nextInt(1000));
Node tail = head;
int length = random.nextInt(100);
for (int i = 0; i < length; i++) {
tail.next = new Node(random.nextInt(100));
tail = tail.next;
}
return head;
}
/**
* 反转双向链表
* @param doubleNode
* @return
*/
public static DoubleNode reverseDoubleNode(DoubleNode doubleNode) {
return null;
}
/**
* 测试单向链表反转
* @param args
*/
public static void main(String[] args) {
for(int i=0;i< 50_0000;i++){
Node head = generateNode();
// 反转两次和原来的单向链表一致,说明反转方法是正确的
Node newHead = reverseNode(reverseNode(head));
if(!nodeEquals(head, newHead)){
System.out.println("reverse failed.");
}
}
}
/**
* 判断两个单向链表是否相等
* 转成string进行判断
* @param head1
* @param head2
* @return
*/
private static boolean nodeEquals(Node head1, Node head2){
String head1Val = nodeToString(head1);
String head2Val = nodeToString(head2);
if (head1Val.equals(head2Val)) {
return true;
}else {
return false;
}
}
/**
* 单向链表转string
* @param head
* @return
*/
private static String nodeToString(Node head){
String value = "";
while (head != null) {
value = value + head.value;
head = head.next;
}
return value;
}
public static void print(Node head){
Node next = head;
while (next != null) {
System.out.println(next.value);
next = next.next;
}
}
}