非递归:
算法核心是:后一个节点指向前一个节点,循环实现
package algorithms_4th;
public class Linked_list {
Node first=null;
static class Node {
int v;
Node next=null;
public Node(int v) {
this.v=v;
}
}
public void InsertNode(Node node) {
if (node!=null) {
if(first==null) {first=node;return;}
Node nodeTem=first;
while(nodeTem.next!=null) {
nodeTem=nodeTem.next;
}
nodeTem.next=node;
}
}
public void ReverseList() {
if(first==null)return;
Node cur_node=first;
Node tem;
Node pre_node=null;
while(cur_node!=null) {
tem=cur_node.next;//store current.next
cur_node.next=pre_node;//back forward
pre_node=cur_node;//next recycle precondition
cur_node=tem;
}
first=pre_node;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Linked_list list= new Linked_list();
for (int i = 0; i < 4; i++) {
list.InsertNode(new Node(i*2));
}
Node node=list.first;
for (int i = 0; i < 4; i++) {
System.out.print(node.v+ " ");
node=node.next;
}
System.out.println();
list.ReverseList();
node=list.first;
for (int i = 0; i < 4; i++) {
System.out.print(node.v+ " ");
node=node.next;
}
}
}