package arrayListTest;
//定义一个链表
public class Node {
private int m_Data;//链表中的数据
private Node m_Next;//链表中指针属性 指向下个Node对象的对象应用
Node(int data){
m_Data=data;
m_Next=null;
}
Node(int data,Node next){
m_Data=data;
m_Next=next;
}
void setData(int data){//修改节点中的数据
m_Data=data;
}
int getData(){//获得节点中的数据
return m_Data;
}
void setNext(Node next){//修改节点的指针
m_Next=next;
}
Node getNext(){//获得节点中的指针指向的对象的引用
return m_Next;
}
}
package arrayListTest;
//修改链表
public class LinksList {
Node m_FirstNode;//链表中的第一个节点
//构造函数
LinksList(){
m_FirstNode=null;
}
LinksList(int data){
m_FirstNode=new Node(data);
}
String visitAllNode(){//遍历数据 将数据串成一个字符串 返回一个S
Node next=m_FirstNode;
String s="";
while(next!=null){
s=s+next.getData()+";";
next=next.getNext();
}
return s;
}
void insertAtBegin(int data){//将数据插入到节点的前面
if(m_FirstNode==null){//如果是空链表的话直接插入就可以了
m_FirstNode=new Node(data);//把data做为第一个节点传给Node对象
}
else{
m_FirstNode=new Node(data,m_FirstNode);//把新节点插入到第一个节点的前面 并指向原来的第一个节点
}
}
void insertAfterId(int data,int id){//将数据data插入到包含数据ID的节点后面 若连接没有id则插入在整个链表的最后
Node next = m_FirstNode;
if(next==null){//对空链表直接插入
m_FirstNode=new Node(data);
}else{
while(next.getNext()!=null&& next.getData()==id){
next=next.getNext();//找到合适的插入位置
// Node i=next.getNext();//创建一个next的指针
// Node next1= new Node(data,i);//创建Node的对象 把data插入到I的位置上
// next.setNext(next1);
next.setNext(new Node(data,next.getNext()));//按照id来设置数据
}
}
}
boolean removeAtId(int id){//删除链表中的第一个数据为ID的节点
Node ahead=m_FirstNode;//前面的节点
Node follow=ahead;//指向ahead节点
if(ahead==null){
return false;
}
else if(ahead.getData()==id){//如果节点获取的数据Data和ID是一样的
m_FirstNode=m_FirstNode.getNext();//删除成功
return true;
}else{
ahead=ahead.getNext();
while(ahead!=null){
if(ahead.getData()==id){
follow.setNext(ahead.getNext());
return true;
}
follow=ahead;
ahead=ahead.getNext();
}
}
return false;
}
void removeAll(){
m_FirstNode=null;
}
}
package arrayListTest;
public class UserLinksList {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
LinksList list = new LinksList(-1); //创建一个含有节点的链表
for (int i = 0; i < 10; i++) {
list.insertAtBegin(i); //想空链表中插入10个节点
System.out.println(list.visitAllNode());
}
list.insertAfterId(37, 6); //在指定的位置插入插入在数据6的后面
System.out.println(list.visitAllNode());
list.insertAfterId(-1, 3); //在指定的位置插入 插入在位置3的后面
System.out.println(list.visitAllNode());
if (list.removeAtId(4)) { //删除链表中的指定节点
System.out.println(list.visitAllNode());
} else {
System.out.println("链表中不存在这个数据");
}
//list.removeAll();//删除整个链表
}
}