一直以來都是使用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;
}
}