单链表结构:
链表的应用场景
1、对线性表的长度或者规模难以估计;
2、频繁做插入删除操作;
3、构建动态性比较强的线性表。
链表的代码实现:
节点类
package linkDemo;
public class Node {
protected Node next; //指针域
protected int data;//数据域
public Node( int data) {
this. data = data;
}
//显示此节点
public void display() {
System. out.print( data + " ");
}
}
package linkDemo;
/**
* 单链表类
* @author cnwl
*
*/
public class LinkList {
public Node first; //定义一个头结点
private int pos = 0; //结点的位置
public LinkList(){
this.first = null;
}
//插入一个头结点
public void addFirstNode(int data){
Node node = new Node(data);
node.next = first;
first = node;
}
//删除一个头结点,并返回头结点
public Node deletefirstNode(){
Node tempNode = first;
first = tempNode.next;
return tempNode;
}
//在任意位置插入节点,在index的后面插入
public void add(int index,int data){
Node node = new Node(data);
Node current = first;
Node previous = first;
while (pos != index){
previous = current;
current = current.next;
pos++;
}
node.next = current;
previous.next = node;
pos=0;
}
//删除任意位置的节点
public Node deleteByPos(int index){
Node current = first;
Node previous = first;
while(pos != index){
pos ++;
previous = current;
current = current.next;
}
if(current == first){
first = first.next;
}else {
pos = 0;
previous.next = current.next;
}
return current;
}
//根据节点的data删除节点(仅仅删除第一个)
public Node deleteByData(int data){
Node current = first;
Node previous = first; //记住上一个节点
while(current.data != data){
if(current.next == null){
return null;
}
previous = current;
current = current.next;
}
if(current == first){
first = first.next;
}else {
pos = 0;
previous.next = current.next;
}
return current;
}
//显示出所有的节点信息
public void displayAllNodes(){
Node current = first;
while (current !=null){
current.display();
current = current.next;
}
System.out.println();
}
//根据位置查找节点信息
public Node findByPos(int index){
Node current = first;
if(pos != index){
current = current.next;
pos++;
}
return current;
}
//根据数据查找节点信息
public Node findByData(int data){
Node current = first;
while(current.data != data){
if(current.next == null ){
return null ;
}
}
return current;
}
}
测试类:
package linkDemo;
public class TestLinkList {
public static void main(String[] args){
LinkList linkList = new LinkList();
linkList.addFirstNode(20);
linkList.addFirstNode(21);
linkList.addFirstNode(19);
//19,21,20
linkList.add(1,22); //19,22,21,20
linkList.add(2,24); //19,22,24,21,20
linkList.add(3,51); //19,22,24,51,21,20
linkList.displayAllNodes();
Node node = linkList.deleteByData(19);
// Node node = linkList.deleteByPos(0);
System. out.println( "node : " + node. data);
linkList.displayAllNodes();
Node node1 = linkList.findByPos(0);
System. out.println( "node1: " + node1. data);
Node node2 = linkList.findByData(22);
System. out.println( "node2: " + node2. data);
}
}
结果: