版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ScongHW/article/details/83578547
链表:链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。(百度百科解释)
1.定义一个节点类
//定义链表节点类
private class Node{
private Object data; //定义节点数据
private Node next; //定义指向的下一个节点
public Node(Object data){
this.data = data;
}
}
2.链表的基本操作
public class SingleLinkedList {
private int size;//定义链表节点的个数
private Node head;//头结点
public SingleLinkedList() {
size = 0;
head = null;
}
//定义链表节点类
private class Node{
private Object data; //定义节点数据
private Node next; //定义指向的下一个节点
public Node(Object data){
this.data = data;
}
}
//添加链表的头结点
public Object addHead(Object obj){
Node newNode = new Node(obj);
if(size==0){
head = newNode;
}else{
newNode.next = head;
head = newNode;
}
size++;
return obj;
}
//删除头结点
public Object deleteHead(){
Object obj = head.data;
head = head.next;
return obj;
}
//查找指定的元素对应的节点
public Node find(Object obj){
int tempSize = size;
Node node = head;
while(tempSize>0){
if(obj.equals(node.data)){
return node;
}else{
node = node.next;
}
tempSize--;
}
return null;
}
//删除指定元素的对应的节点
public boolean deleteNode(Object obj){
if(size == 0){
return false;
}
Node firstNode = head; //当前节点
Node nextNode = head; //后一个节点
while(nextNode.data!=obj){
if(nextNode.next == null){
return false;
}else{
firstNode = nextNode;
nextNode = nextNode.next;
}
}
//如果是头结点的话
if(nextNode == head){
head = nextNode.next;
size--;
}else{
firstNode.next = nextNode.next;
size--;
}
return true;
}
//判断链表是否为空
public boolean isEmpty(){
if(size>0){
return false;
}else{
return true;
}
}
//打印链表
public void display(){
if(size>0){
Node node = head;
int tempSize = size;
if(tempSize==1){
System.out.print("["+node.data+"]");
return ;
}
while(tempSize>0){
if(node.equals(head)){
System.out.print("["+node.data+"->");
}else if(node.next==null){
System.out.print(node.data+"]");
}else{
System.out.print(node.data+"->");
}
tempSize--;
node = node.next;
}
System.out.println();
}else{
System.out.println("[]");
}
}
}
3.测试一下
//测试
@Test
public void test(){
SingleLinkedList list = new SingleLinkedList();
list.addHead("A");
list.addHead("B");
list.addHead("C");
list.addHead("D");
list.addHead("E");
list.addHead("F");
list.display();
list.deleteNode("C");
list.display();
System.out.println("node:"+list.find("F").data);
}
结果:
[F->E->D->C->B->A]
[F->E->D->B->A]
node:F