/**
* 链表反转--单链表与双链表的反转
* */
public class ReverseList {
//单链表
public static class Node{
int val ;
Node next;
public Node(int va){
this.val = va;
}
}
//双链表
public static class DoubleNode{
int val;
DoubleNode next;
DoubleNode last;
public DoubleNode(int va){
this.val = va;
}
}
//单链表反转
public static Node reverseNodeList(Node head){
Node next = null;
Node pre = null;
while (head != null){
next = head.next;
head.next = pre;
pre = head;
head = next;
}
return pre;
}
//双链表反转
public static DoubleNode reverseDoubleNodeList(DoubleNode head){
DoubleNode next = null;
DoubleNode pre = null;
while (head != null){
next = head.next;
head.next = pre;
head.last = next;
pre = head;
head = next;
}
return pre;
}
public static void printNode(Node head){
Node cur = head;
while (cur != null){
System.out.print(cur.val);
cur = cur.next;
}
System.out.println();
}
public static void printDoubleNode(DoubleNode head){
DoubleNode cur = head;
while (cur != null){
System.out.print(cur.val);
cur = cur.next;
}
System.out.println();
}
public static void main(String[] args) {
Node node1 = new Node(1);
Node node2 = new Node(2);
Node node3 = new Node(3);
Node node4 = new Node(4);
Node node5 = new Node(5);
node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
printNode(node1);
node1 = reverseNodeList(node1);
printNode(node1);
DoubleNode d1 = new DoubleNode(1);
DoubleNode d2 = new DoubleNode(2);
DoubleNode d3 = new DoubleNode(3);
DoubleNode d4 = new DoubleNode(4);
DoubleNode d5 = new DoubleNode(5);
d1.next = d2;
d1.last = null;
d2.next = d3;
d2.last = d1;
d3.next = d4;
d4.next = d5;
d3.last = d2;
d4.last = d3;
d5.last = d4;
printDoubleNode(d1);
d1 = reverseDoubleNodeList(d1);
printDoubleNode(d1);
}
}
链表反转--单链表与双链表的反转
最新推荐文章于 2023-04-27 19:58:35 发布