今天看了一个算法的问题单链反转算法,理解了一下,明白了链表的实现原理,以下是俩种方法来进行这个计算:
package com.example.jingbin.algorithmlearn;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Node node0 = new Node(0);
Node node1 = new Node(1);
Node node2 = new Node(2);
Node node3 = new Node(3);
Node node4 = new Node(4);
Node node5 = new Node(5);
Node node6 = new Node(6);
node0.setNext(node1);
node1.setNext(node2);
node2.setNext(node3);
node3.setNext(node4);
node4.setNext(node5);
node5.setNext(node6);
Node h = node0;
int i = 0;
while (h != null){
i++ ;
System.out.println("第" + i+ "个数据为 " + h.getData());
h = h.getNext();
}
Node headnew = revertData2(node0); //非递归算法//revertData(node0);//递归算法
System.out.println("headnew.data = " + headnew);
i = 0;
while (headnew != null){
i++ ;
System.out.println("第" + i+ "个数据为 " + headnew.getData());
headnew = headnew.getNext();
}
}
private Node revertData(Node head) {
if(head == null || head.getNext() == null) {
return head;
}
Node temp = revertData(head.getNext());
head.getNext().setNext(head);
head.setNext(null);
return temp;
}
public Node revertData2(Node head){
if(head == null)return head;
Node pre = head;
Node cur = head.getNext();
Node temp;
while (cur != null){
temp = cur.getNext();
cur.setNext(pre);
pre = cur;
cur = temp;
}
head.setNext(null);
return pre;
}
private 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 node) {
this.next = node;
}
public Node(int data){
this.data = data;
}
}
}