说到链表的反转,当初第一次接触这个概念的时候,首先想到的办法就是,首先对链表做一个遍历,强行给每个节点记录一个顺序,然后再根据顺序重新构建列表,这种办法虽然可以实现,但是效率不高(主要是取决重新排序生成列表的排序算法复杂度),下面这个办法的算法复杂度仅仅为O(N),附代码
// Java program for reversing the linked list
class LinkedList {
static Node head;
static class Node {
int data;
Node next;
Node( int d) {
data = d;
next = null ;
}
}
/* Function to reverse the linked list */
Node reverse(Node node) {
Node prev = null ;
Node current = node;
Node next = null ;
while (current != null ) {
next = current.next;
current.next = prev;
prev = current;
current = next;
}
node = prev;
return node;
}
// prints content of double linked list
void printList(Node node) {
while (node != null ) {
System.out.print(node.data + " " );
node = node.next;
}
}
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.head = new Node( 85 );
list.head.next = new Node( 15 );
list.head.next.next = new Node( 4 );
list.head.next.next.next = new Node( 20 );
System.out.println( "Given Linked list" );
list.printList(head);
head = list.reverse(head);
System.out.println( "" );
System.out.println( "Reversed linked list " );
list.printList(head);
}
}
|