单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),相当于车厢与单向车链组成:
1.定义单链
package List;
//链节点,有数据域和指针域构成
public class Node {
public long data; //数据域
public Node next; //指针域
public Node(long value) {
this.data = value;
}
public void display() {
System.out.print(data+" ");
}
}
2.链表实现
package List;
//链表,
public class Linklist {
private Node first;// 首个链接点,相当于车头
public Linklist() {
first = null; //其链默认指向null
}
//在头节点后插入一个节点
public void insertfirst(long value) {
Node curr = new Node(value);
curr.next = first; //插入节点指向首节点指向的节点
first = curr; //首节点指向插入节点first = curr.next表示指向curr的下一个
}
//在头节点后删除一个节点
public Node removefirst() {
Node temp = first; //定义当前节点
first = temp.next; //直接跳过first.next,从而指向第三个节点
return temp;
}
//显示链表
public void display1() {
Node curr = first;
while(curr != null) //判断当前有元素存在
{
curr.display(); //调用Node里面的显示方法
curr = curr.next;//继续遍历下个节点
}
System.out.println();
}
//查找链节点
public Node find(long value) {
Node curr = first;
while(curr.data!=value) {
if(curr.next==null) {
return null;
}
curr = curr.next;
}
return curr;
}
//删除节点
public Node delete(long value) {
Node curr = first;
Node prev = first;
while(curr.data!=value) {
if(curr.next==null) {
return null;
}
prev = curr; //之前的要指向当前的链接点
curr = curr.next;//当前的链接点要指向下一个
if(curr==first) //判断删除节点是否为首节点
{
first = first.next;
}
else {
prev.next = curr.next; //删除当前的节点prev(prev.next)》curr(curr.next)》node
}
}
return curr;
}
}
3.测试代码
package List;
public class TestLinklist {
public static void main(String[] args) {
Linklist l1 = new Linklist();
l1.insertfirst(25);
l1.insertfirst(36);
l1.insertfirst(18);
l1.insertfirst(43);
l1.display1();
l1.removefirst();
l1.display1();
//查找某个值
Node t1 = l1.find(36);
t1.display();
System.out.println();
//删除某个值
Node t2 = l1.delete(36);
t2.display();
System.out.println();
l1.display1();
}
}
转载:https://blog.csdn.net/sdshdutx/article/details/102468929
查看评论