小言_互联网的博客

单链表构建

293人阅读  评论(0)

单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),相当于车厢与单向车链组成:
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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场