一直以来都是使用c来操作链表,c的指针也天然的告诉我们链表操作就是那么自然而然,然而,如果突然告诉你用java做链表逆置的时候,我们直接就想到用集合工具类,reverse一下就 好了,但是如果让自己写一个,或许也得思考一下才能写出。诚然,java的Api封装极大的提高了编程的效率,但是长时间的使用java的各种APi可能会 使我们都忘了最基本的数据结构和算法。虽然,工作中这些基础性的东西可能直接用的并不多,更多的是涉及到一些具体的业务需求和逻辑上,但是时不时回顾一下这些基础,对于技术的积累也是极好的。
public class ReverseLinkList {
public static void main(String[] args) {
ReverseLinkList rll = new ReverseLinkList();
Node link = rll.initLinkList();
Node pNode = link.getNext();
while(pNode!=null){
System.out.print(pNode.getData()+",");
pNode = pNode.getNext();
}
System.out.println();
link = rll.reverseLinkList(link);
pNode = link.getNext();
while(pNode!=null){
System.out.print(pNode.getData()+",");
pNode = pNode.getNext();
}
}
public Node initLinkList(){
Node head = new Node();
head.setNext(null);
Node pNode = head;
for(int i=0;i<10;i++){
Node node=new Node();
node.setData(i);
node.setNext(null);
pNode.setNext(node);
pNode = node;
}
return head;
}
public Node reverseLinkList(Node head){
Node pNode=head.getNext();
head.setNext(null);
while(pNode!=null){
Node qNode = head.getNext();
head.setNext(pNode);
pNode=pNode.getNext();
head.getNext().setNext(qNode);
}
return head;
}
}
class Node{
private int data;
private Node next;
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}