/**
* 单链表和双链表反转
* 链表反转的精髓:在反转节点之前,记下当前节点的前后节点
*/
public class Code01 {
//单链表节点类
public static class Node{
private Integer value;
private Node next;
public Node(Integer value) {
this.value = value;
}
public Integer getValue() {
return value;
}
public void setValue(Integer value) {
this.value = value;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
// 双链表节点类
public static class DoubleNode {
public int value;
public DoubleNode last;
public DoubleNode next;
public DoubleNode(int data) {
value = data;
}
}
//单链表打印
public static void print(Node head){
while (head != null){
System.out.print(head.value+" ");
head = head.next;
}
}
//双链表打印
public static void print1(DoubleNode head){
while (head != null){
System.out.print(head.value+" ");
head = head.next;
}
}
//单链表反转
public static Node reverse(Node head){
Node pre = null;
Node next = null;
while (head != null){
next = head.next;
head.next = pre;
pre = head;
head = next;
}
return pre;
}
//双链表反转
public static DoubleNode reverseDoubleList(DoubleNode head){
DoubleNode pre = null;
DoubleNode next = null;
while (head != null){
next = head.next;
head.next = pre;
head.last = next;
pre = head;
head = next;
}
return pre;
}
// 生成双链表
public static DoubleNode generateRandomDoubleList(int len, int value) {
int size = (int) (Math.random() * (len + 1));
if (size == 0) {
return null;
}
size--;
DoubleNode head = new DoubleNode((int) (Math.random() * (value + 1)));
DoubleNode pre = head;
while (size != 0) {
DoubleNode cur = new DoubleNode((int) (Math.random() * (value + 1)));
pre.next = cur;
cur.last = pre;
pre = cur;
size--;
}
return head;
}
public static void main(String[] args) {
// Node head = new Node(1);
// head.next = new Node(2);
// head.next.next = new Node(3);
// print(head);
// System.out.println();
// Node newHead = reverse(head);
// print(newHead);
int len = 10;
int value = 10;
int testTime = 100;
for (int i = 0; i < testTime; i++) {
DoubleNode head = generateRandomDoubleList(len,value);
print1(head);
DoubleNode doubleNode = reverseDoubleList(head);
System.out.println();
print1(doubleNode);
System.out.println();
System.out.println("----------------------");
}
}
}
单链表、双链表的反转
最新推荐文章于 2024-09-16 16:34:56 发布