head—>a—->b—->c
变成:
head—>c—->b—->a
我们可以用循环的方式去实现,遍历一次链表即可。
1.用一个临时变量tmp存储 a的下一个元素b,a的next指向null,即”由头变尾”,head指向null。
head—->null
a b—->c
tmp—->b
2.因为此时tmp就是b,所以将tmp指向tmp的下一个元素c。将b next指向a
head—->null
a <—– b c
tmp—->c
3.因为此时tmp就是c,所以将tmp指向tmp的下一个元素null。将c next指向b
head—->null
a <—– b <—– c
tmp—->null
4.head——->c
/**
* 链表反转
* @author guohui
*
*/
public class ReverLink {
public static void main(String[] args) {
Node head = new Node();
Node n1 = new Node();
Node n2 = new Node();
Node n3 = new Node();
head.next=n1;
n1.data=1;
n1.next=n2;
n2.data = 2;
n2.next = n3;
n3.data = 3;
reverse(head);
Node cur = head;
while(cur!=null){
System.out.println(cur.data);
cur = cur.next;
}
}
/**
* 链表反转
* @param head
*/
public static void reverse(Node head) {
if(head ==null ){
return ;
}
boolean isFisrt = true;
Node pre = head;
Node cur = head.next;
Node tmp;
while(cur!=null){
tmp = cur.next;
if(!isFisrt){
cur.next = pre;
}else{
isFisrt = false;
cur.next = null;
}
pre = cur;
cur = tmp;
}
head.next = pre;
}
}
/**
* 链表数据结构
* @author guohui
*
* @param
*/
public class Node<T> {
public Node next;
public T data;
}