链表实现
节点类
package link_list;
public class ListNode {
private int data;
private ListNode next;
public ListNode(){
}
public ListNode(int data){
this.data=data;
}
public void setData(int data){
this.data=data;
}
public int getData(){
return data;
}
public void setNext(ListNode next){
this.next=next;
}
public ListNode getNext() {
// TODO Auto-generated method stub
return next;
}
}
链表类
package link_list;
public class LinkList {
public ListNode head=new ListNode(0);//使用具有空节点的链表
public void addToHead(int n){
ListNode add=new ListNode(n);
add.setNext(head.getNext());
head.setNext(add);
}
public void addToTail(int n){
ListNode add=new ListNode(n);
ListNode p=head;
while((p.getNext()).getNext()!=null){//容易丢一个getNext() 注意最后一次循环
p=p.getNext();
}
(p.getNext()).setNext(add);
}
public boolean addAfterNth(int n,int addData){
ListNode add=new ListNode(addData);
if(n<=0) return false;
ListNode p=head;
int count=0;//计数 P指到第几个数
while(count<n){
p=p.getNext();
count++;
if(p==null) return false;
}
add.setNext(p.getNext());
p.setNext(add);
return true;
}//在第n个数据后面插入新数据
public int length(){
ListNode p=head.getNext();
int count=0;
while(p!=null){
count++;
p=p.getNext();
}
return count;
}//遍历求长
public void printDatas(){
ListNode p=head.getNext();
while(p!=null){
System.out.print(p.getData()+" ");
p=p.getNext();
}
System.out.println();
}
}
测试类
package link_list;
public class TestLinkList {
public static void main(String[] args){
LinkList l=new LinkList();
System.out.println("初始长度为:"+l.length());
l.addToHead(2);
l.addToHead(3);
System.out.print("数据依次为:");
l.printDatas();
l.addToTail(44);
l.addToTail(5);
System.out.print("数据依次为:");
l.printDatas();
l.addAfterNth(4, 222);
l.addAfterNth(1, 22);
System.out.print("数据依次为:");
l.printDatas();
System.out.println("当前长度为:"+l.length());
}
}
输出如下:
初始长度为:0
数据依次为:3 2
数据依次为:3 2 44 5
数据依次为:3 22 2 44 5 222
当前长度为:6
栈实现
链表栈类
将头结点一端作为top,实现栈的三个主要方法:
pop:删除第一个节点并取出值(写的时候忘记返回数值了,懒得改了)
getTop:获取top端第一个节点的值
push:向top端压入新数据,实现方法为单链表中的头插法
package link_list;
public class LinkListStack {
public ListNode head=new ListNode(0);
public void push(int n){
ListNode add=new ListNode(n);
add.setNext(head.getNext());
head.setNext(add);
}//链表头插
public boolean pop(){
if(head.getNext()==null) return false;
else{
head.setNext(head.getNext().getNext());
return true;
}
}
public int getTop(){
if(head.getNext()==null) return -11111;
return (head.getNext()).getData();
}
}
链表栈的测试类
package link_list;
public class TextLLStack {
public static void main(String[] args){
LinkListStack stack=new LinkListStack();
stack.push(2);
stack.push(1);
stack.push(-1);
for(int i=0;i<3;i++){
System.out.println(stack.getTop());
stack.pop();
}
}
}
输出结果如下:
-1
1
2
-11111