1.反转单向链表
class Node{
int value;
Node next;
public Node(int data){
this.value = data;
}
}
public class e09ReverseList {
public static Node reverseList(Node head){
Node pre=null;
Node be=null;
while(head!=null){
be=head.next;
head.next=pre;
pre=head;
head=be;
}
return pre;
}
public static void printLinkedList(Node head){
System.out.print("Linked List: ");
while (head!=null){
System.out.print(head.value+" ");
head=head.next;
}
}
public static void main(String[] args) {
Node h1=new Node(1);
Node h2=new Node(2);
Node h3=new Node(3);
Node h4=new Node(4);
h1.next=h2;
h2.next=h3;
h3.next=h4;
Node n=reverseList(h3);
printLinkedList(n);
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;
DoubleNode d=reverseList(head2);
printDoubleLinkedList(d);
}
}
2.反转双向链表
与上面反转单链表的代码只有两处不同:①定义结点时加入last指针;②添加 head.last = next
class DoubleNode {
public int value;
public DoubleNode last;
public DoubleNode next;
public DoubleNode(int data) {
this.value = data;
}
}
public class e09ReverseList {
public static DoubleNode reverseList(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 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 h1=new Node(1);
Node h2=new Node(2);
Node h3=new Node(3);
Node h4=new Node(4);
h1.next=h2;
h2.next=h3;
h3.next=h4;
Node n=reverseList(h3);
printLinkedList(n);
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;
DoubleNode d=reverseList(head2);
printDoubleLinkedList(d);
}
}