package DataStructure_3;
import java.util.Stack;
import DataStructure_1.LinkedList.Node;
public class LinkedList {
private Node head;
static int size = 0;
public void add(Object o){
if(null == head){
head = new Node();
head.data = o;
head.next = null;
}else{
Node p = head;
while(null != p.next){
p = p.next;
}
Node newNode = new Node();
newNode.data = o;
p.next = newNode;
newNode.next =null;
}
size++;
}
public int size(){
return size;
}
public void add(int index,Object o){
if(index < 0){
throw new RuntimeException("�±겻��Ϊ����");
}
if(index == 0){
addFirst(o);
size++;
return;
}
if(index > size){
throw new RuntimeException("");
}
int i = 0;
Node p = head;
Node q = null;
while(i!=index){
q = p;
p = p.next;
i++;
}
Node r = new Node();
r.data = o;
r.next =null;
q.next = r;
r.next = p;
size++;
return;
}
public Object get(int index){
int i = 0;
Node p = head;
while(i != index){
p = p.next;
i++;
}
return p.data;
}
public Object remove(int index){
if(index < 0){
throw new RuntimeException("�±겻��Ϊ����");
}
if(index == 1){
size--;
return head.data;
}
int i = 0;
Node p = head;
Node q = null;
while(i != index){
q = p;
p = p.next;
i++;
}
q.next = p.next;
size--;
return p.data;
}
public void addFirst(Object o){
Node p = new Node();
p.next = head;
p.data = o;
head = p;
size++;
}
public Object removeFirst(){
head = head.next;
size--;
return null;
}
public static class Node{
Object data;
Node next;
}
/**
* �Ѹ���������
* �������� 3->7->10 �����ú��Ϊ 10->7->3
*/
public void reverse(){
if(null == head || null == head.next){
return;
}
Stack<Node> s = new Stack<Node>();
Node curNode = head;
while(curNode != null){
s.push(curNode);
Node nextNode = curNode.next;
curNode.next = null; // �����Ͽ�������
curNode = nextNode;
}
head = s.pop();
curNode = head;
while(!s.isEmpty()){
Node nextNode = s.pop();
curNode.next = nextNode;
curNode = nextNode;
}
}
public String toString(){
StringBuffer buffer = new StringBuffer();
buffer.append("[");
Node node = head;
while(node != null){
buffer.append(node.data);
if(node.next != null){
buffer.append(",");
}
node = node.next;
}
buffer.append("]");
return buffer.toString();
}
}