流程图:
代码示例
单向列表反转代码
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; } }}