您的位置:首页 > 编程语言 > Java开发

单链表反转--java版

2017-06-04 13:32 477 查看

单链表反转–java版

思路

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<Integer> head = new Node<Integer>();
Node<Integer> n1 = new Node<Integer>();
Node<Integer> n2 = new Node<Integer>();
Node<Integer> n3 = new Node<Integer>();
head.next=n1;
n1.data=1;
n1.next=n2;
n2.data = 2;
n2.next = n3;
n3.data = 3;

reverse(head);
Node<Integer> cur = head;
while(cur!=null){
System.out.println(cur.data);
cur = cur.next;
}
}

/**
* 链表反转
* @param head
*/
public static void reverse(Node<Integer> head) {
if(head ==null ){
return ;
}
boolean isFisrt = true;
Node<Integer> pre = head;
Node<Integer> cur = head.next;
Node<Integer> 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 <T>
*/
public class Node<T> {
public Node next;
public T data;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 单链表