03打卡链表1

本文详细介绍了链表数据结构的实现,包括MyLinkedList类中的get,addAtIndex,deleteAtIndex方法,以及如何处理反转链表的问题,特别强调了虚拟头节点和索引操作的注意事项。
摘要由CSDN通过智能技术生成

L0707 设计链表

个人感觉这一题比较重要,深刻理解链表。
注意最值得思考和注意的点是对于链表中第几个 这种问题,需要确定好虚拟头节点的index在自己的代码中是0 还是-1


    class MyLinkedList {

        int size;
        ListNode head;   //是虚拟头结点  这里认为其index是-1

        public MyLinkedList() {
            size = 0;
            head = new ListNode(-1);
        }

        public int get(int index) {
            if (index < 0 || index > size - 1) {
                return -1;
            }
            ListNode pointer = head;
            for (int i = 0; i <=index; i++) {
                pointer = pointer.next;
            }
            return pointer.val;

        }
        public void addAtIndex(int index, int val) {
            if (index < 0 || index > size) {
                return;
            }
            ListNode pre = head;
            
//            0 1 2 3 4 5
            for (int i = 0; i <index; i++) {
                pre = pre.next;
            }
            pre.next = new ListNode(val, pre.next);
            size++;
        }

        public void deleteAtIndex(int index) {
            if (index < 0 || index >= size) {
                return;
            }
            //           -1 0 1 2 3 4 5
            ListNode pre = head;
            for (int i = 0; i <index; i++) {
                pre = pre.next;
            }
            pre.next = pre.next.next;
            size--;
        
        }
        public void addAtHead(int val) {
            addAtIndex(0,val);

        }
        public void addAtTail(int val) {
        addAtIndex(size,val);
        }
    }

L206 反转链表

同样是这种模拟题目,需要的注意

  • 指针断开和连接的逻辑
  • cur到底是哪个节点
  • 什么时候结束while循环
    题目其实没什么好说的,标一个错误答案 ↓
    这样写会导致链表成环
        public ListNode reverseList(ListNode head) {
            if(head == null || head.next == null) return head;

            ListNode slow = head;
            ListNode fast = head.next;
            while(fast != null){
              ListNode  temp = fast.next;
                fast.next = slow;
                slow = fast;
                fast =temp;
            }
        return slow;
    }

是因为从左边到右边的时候,其实存在着①→②这个结构。

在这里插入图片描述
因为原先的头结点变成了尾节点,而尾节点.next = null,因此可以在初始化完成后手动将将要成为尾节点的头结点指向空。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值