Java实现链表头插、尾插等功能

//前驱  prev   previous
//后继  next

//创建结点
class Node {
    int val;  //data|element
    Node next;//如果next == null表示是最后一个结点
    
    Node(int val) {
        this.val = val;
        this.next = null;
    }
    public String toString() {
        return String.format("Node(%d)",val);
    }
}

public class MyLinkedList {
     public static void main(String[] args) {
         Node head = null;
         //head的意思是链表的第一个结点
         //通过第一个结点,就可以找到完整的链表的所有结点
         //所以,链表的第一个结点往往代表整个链表
         
         //空的链表,就是一个结点都没有的链表
         //也就没有第一个结点
         //head==null表示第一个结点不存在
         //也就是整个链表为空
         
         head = pushFront(head,0);
         head = pushFront(head,1);
         head = pushFront(head,2);
         print(head);// 2  1  0
         
         head = popFront(head);
         print(head);// 1  0
         
         head = pushBack(head,10);
         head = pushBack(head,20);
         head = pushBack(head,30);
         print(head);//1  0  10  20  30
         
         head = popBack(head);
         head = popBack(head);
         head = popBack(head);
         head = popBack(head);
         head = popBack(head);
         
         head = popBack(head);//报错
         print(head);//空
         
         head = pushBack(head,100);
         print(head);//100
         
     }
     
     //打印
     private static void print(Node head) {
         System.out.println("打印链表:");
         for(Node cur = head;cur != null;cur = cur.next)
         {
             System.out.print(cur+"-->");
         }
         System.out.println("null");
     }
     
     //头插
     //head:原来的第一个结点
     //val:要插入的值
     //返回:新的第一个结点
     private static Node pushFront(Node head, int val){
         //1.结点
         Node node = new Node(val);
         //2.让原来的head成为node的下一个结点
         node.next = head;
         //3.更新第一个结点的引用
         return node;
}
     //尾插
     private static Node pushBack(Node head ,int val) {
         Node node = new Node(val);
         if(head == null)
         {
             return node;
         }
         else{
             Node last = head;
         while(last.next!=null)
         {
             last = last.next;
         }
         last.next = node;
         return head;
         }
     }
     
     //头删
     private static Node popFront(Node head) {
         if(head == null)
         {
             System.out.println("链表为空,无法删除");
             return null;
         }
         //原来的第一个结点,会因为没有引用指向而被回收
         return head.next;
     }
        
    //尾删
     private static Node popBack(Node head) {
         if(head == null)
         {
             System.out.println("链表为空,无法删除");
             return null;
         }
         else if(head.next == null)
         {
             return null;
         }
         else
         {
             Node lastSecond = head;
             while(lastSecond.next.next != null)
             {
                 lastSecond=lastSecond.next;
             }
            lastSecond.next = null;
            return head;
            
         }
         
    
  }
     

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值