题目
题意:
在链表类中实现这些功能:
get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。
addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。
addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。
addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾。如果 index 大于链表长度,则不会插入节点。如果index小于0,则在头部插入节点。
deleteAtIndex(index):如果索引 index 有效,则删除链表中的第 index 个节点。
思路
- 创建成员变量size和head,在构造函数中初始化size和head。在增删节点的操作中维护变量size
- 注意curr初始的指向位置和遍历循环的终止条件
实现
// package com.dj.mall.algorithm.node;//单链表
class ListNode {int val;ListNode next;ListNode(){}ListNode(int val) {this.val=val;}
}class MyLinkedList {//链表长度int size;//虚拟头节点ListNode head;public MyLinkedList() {size = 0;head = new ListNode(0);}public int get(int index) {if(size == 0 || index < 0 || index > size - 1){return -1;}ListNode curr = head;//index + 1的元素while(index >= 0){curr = curr.next;index--;}return curr.val;}public void addAtHead(int val) {ListNode newNode = new ListNode(val);ListNode temp = head.next;head.next = newNode;newNode.next = temp;size ++;}public void addAtTail(int val) {//遍历到最后一个节点ListNode curr = head;while(curr.next != null){curr = curr.next;}curr.next = new ListNode(val);size ++;}public void addAtIndex(int index, int val) {if(index < 0 || index > size){return;}ListNode curr = head;//将curr遍历到index-1的节点while(index > 0){curr = curr.next;index --;}ListNode newNode = new ListNode(val);ListNode temp = curr.next;curr.next = newNode;newNode.next = temp;size++;}public void deleteAtIndex(int index) {if(index < 0 || index > size - 1){return;}ListNode curr = head;while(index > 0 ){curr = curr.next;index --;}curr.next = curr.next.next;size --;}// public static void main(String[] args) {// MyLinkedList myLinkedList = new MyLinkedList();// myLinkedList.addAtTail(7);// myLinkedList.get(0);// myLinkedList.addAtHead(2);// myLinkedList.addAtHead(1);// myLinkedList.addAtIndex(3,0);// myLinkedList.deleteAtIndex(2);// myLinkedList.addAtHead(6);// myLinkedList.addAtTail(4);// myLinkedList.addAtHead(4);// myLinkedList.get(4);// myLinkedList.addAtIndex(5,0);// myLinkedList.addAtHead(6);// }}