Java数据结构和算法 | ||
---|---|---|
上一篇 | 主目录 | 下一篇 |
SingleLinkedListDemo.java
package linkedlist;
import linkedlist.LinkedListNode;
import java.util.Stack;
public class SingleLinkedListDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
SingleLinkedList sl=new SingleLinkedList();
sl.add(1, 1);
sl.add(2, 2);
sl.add(3, 3);
sl.add(4, 4);
sl.add(5, 5);
sl.add(6, 6);
System.out.println("lenth:"+sl.getLength());
sl.show();
sl.del(5);
System.out.println("lenth:"+sl.getLength());
sl.show();
sl.reverse();
sl.show();
System.out.println("showReverse:");
sl.showReverse();
}
}
/*链表结构,泛型类,,,由import linkedlist.LinkedListNode;引入
class LinkedListNode<T>{
private T val;
public LinkedListNode<T> next;
public LinkedListNode(T val) {
this.val=val;
}
public T getVal() {
return val;
}
}*/
//单向链表类
class SingleLinkedList{
//先初始化一个头节点, 头节点不要动, 不存放具体的数据
public LinkedListNode head;
public SingleLinkedList() {
head=new LinkedListNode();
}
//获取链表的长度
public int getLength() {
int count=0;
LinkedListNode p=head.next;
while(p!=null) {
count+=1;
p=p.next;
}
return count;
}
//添加节点到单向链表
public void add(int val,int position) {
if(position<0||position>(getLength()+1)) {
System.out.println("invalid position");
}else {
LinkedListNode l=new LinkedListNode(val);
LinkedListNode p=head;
for(int i=0;i<position-1;i++) {
p=p.next;
}
l.next=p.next;
p.next=l;
System.out.println("ok");
}
}
//返回头节点
public LinkedListNode getHead() {
return head;
}
//删除某一个位置上的节点
public void del(int position) {
if(position<0||position>getLength()) {
System.out.println("invalid position");
}else {
LinkedListNode p=head;
for(int i=0;i<position-1;i++) {
p=p.next;
}
p.next=p.next.next;
System.out.println("ok");
}
}
//修改某一个位置上的节点的值
public void update(int position,int val) {
if(position<0||position>getLength()) {
System.out.println("invalid position");
}else {
LinkedListNode p=head;
for(int i=0;i<position;i++) {
p=p.next;
}
p.val=val;
System.out.println("ok");
}
}
//显示链表中的数据
public void show() {
LinkedListNode p=head.next;
System.out.println("List:");
while(p!=null) {
System.out.printf("%d\t",p.val);
p=p.next;
}
System.out.println();
}
//单链表反转
public void reverse() {
LinkedListNode p=head.next;
LinkedListNode h=new LinkedListNode();
while(p!=null) {
head.next=p.next;
p.next=h.next;
h.next=p;
p=head.next;
}
head=h;
System.out.println("reverse");
}
//逆序打印单链表,用栈
public void showReverse() {
LinkedListNode p=head.next;
Stack<Integer> s=new Stack();
System.out.println("List:");
while(p!=null) {
s.push(p.val);
p=p.next;
}
while(!s.isEmpty()) {
System.out.printf("%d\t",s.pop());
}
System.out.println();
}
}