单链表:
用一个临时变量节点temp保存当前节点的下一个节点,当前节点的下一个节点指向前节点pre,pre便成为当前节点,当前节点便成为temp
双链表:
和单链表情况类似,用temp节点保存当前节点的下一个节点,当前节点的下一个节点指向前节点pre,当前节点的上一个节点指向temp节点(已保存好的下一个节点),pre往右走便成为当前节点,当前节点往右走便成为temp
code:
public class RevrseLinkedList {
public static class Node{
public int value;
public Node next;
public Node(int data) {
this.value = data;
}
}
public static Node reverseList(Node cur) {
Node pre = null; //前结点
Node temp = null; //临时变量保存当前结点的后结点
while(cur != null) {
temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
}
return pre;
}public class RevrseLinkedList {
public static class Node{
public int value;
public Node next;
public Node(int data) {
this.value = data;
}
}
public static Node reverseList(Node cur) {
Node pre = null; //前结点
Node temp = null; //临时变量保存当前结点的后结点
while(cur != null) {
temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
}
return pre;
}
public static void printLinkedList(Node head) {
System.out.println("Linked List:");
while(head != null) {
System.out.print(head.value + " ");
head = head.next;
}
System.out.println();
}
public static class DoubleNode{
public int value;
public DoubleNode last;
public DoubleNode next;
public DoubleNode(int data) {
this.value = data;
}
}
public static DoubleNode reverseListD(DoubleNode cur) {
DoubleNode pre = null;
DoubleNode temp = null;
while(cur != null) {
temp = cur.next;
cur.next = pre;
cur.last = temp;
pre = cur;
cur = temp;
}
return pre;
}
public static void printDoubleLinkedList(DoubleNode head) {
System.out.print("Double Linked List:");
DoubleNode end = null;
while(head != null) {
System.out.print(head.value + " ");
end = head;
head = head.next;
}
System.out.print("| ");
while(end != null) {
System.out.print(end.value + " ");
end = end.last;
}
System.out.println();
}
public static void main(String[] args) {
Node head1 = new Node(1);
head1.next = new Node(2);
head1.next.next = new Node(3);
printLinkedList(head1);
head1 = reverseList(head1);
printLinkedList(head1);
DoubleNode head2 = new DoubleNode(1);
head2.next = new DoubleNode(2);
head2.next.last = head2;
head2.next.next = new DoubleNode(3);
head2.next.next.last = head2.next;
head2.next.next.next = new DoubleNode(4);
head2.next.next.next.last = head2.next.next;
printDoubleLinkedList(head2);
printDoubleLinkedList(reverseListD(head2));
}
public static void printLinkedList(Node head) {
System.out.println("Linked List:");
while(head != null) {
System.out.print(head.value + " ");
head = head.next;
}
System.out.println();
}
public static class DoubleNode{
public int value;
public DoubleNode last;
public DoubleNode next;
public DoubleNode(int data) {
this.value = data;
}
}
public static DoubleNode reverseListD(DoubleNode cur) {
DoubleNode pre = null;
DoubleNode temp = null;
while(cur != null) {
temp = cur.next;
cur.next = pre;
cur.last = temp;
pre = cur;
cur = temp;
}
return pre;
}
public static void printDoubleLinkedList(DoubleNode head) {
System.out.print("Double Linked List:");
DoubleNode end = null;
while(head != null) {
System.out.print(head.value + " ");
end = head;
head = head.next;
}
System.out.print("| ");
while(end != null) {
System.out.print(end.value + " ");
end = end.last;
}
System.out.println();
}
public static void main(String[] args) {
Node head1 = new Node(1);
head1.next = new Node(2);
head1.next.next = new Node(3);
printLinkedList(head1);
head1 = reverseList(head1);
printLinkedList(head1);
DoubleNode head2 = new DoubleNode(1);
head2.next = new DoubleNode(2);
head2.next.last = head2;
head2.next.next = new DoubleNode(3);
head2.next.next.last = head2.next;
head2.next.next.next = new DoubleNode(4);
head2.next.next.next.last = head2.next.next;
printDoubleLinkedList(head2);
printDoubleLinkedList(reverseListD(head2));
}
}