当前位置:网站首页>【 LeetCode 】 design list
【 LeetCode 】 design list
2022-08-02 05:04:00 【EvilChou】
链表操作的两种方式:
- 直接使用原来的链表来进行操作.
- 设置一个虚拟头结点在进行操作.
下面采用的设置一个虚拟头结点.
Singly linked list method
//定义链表
class ListNode{
int val;
ListNode next;
ListNode(){}
ListNode(int val){this.val = val;}
ListNode(int val,ListNode next){this.val = val;this.next = next;}
}
//单链表
class MyLinkedList {
int size; //链表中元素个数
ListNode dummyHead; //虚拟头结点
public MyLinkedList() { //初始化链表
size = 0;
dummyHead = new ListNode(0);
}
public int get(int index) {
if(index < 0 || index >= size){
return -1;
}
ListNode cur = dummyHead; // 或者ListNode cur = dummyHead.next;
for(int i = 0;i <= index;i++){ //或者for(int i = 0;i < index;i++){
cur = cur.next;
}
return cur.val;
}
public void addAtHead(int val) {
addAtIndex(0,val);
}
public void addAtTail(int val) {
addAtIndex(size,val);
}
public void addAtIndex(int index, int val) {
// 在第index个节点之前插入一个新节点,例如index为0,那么新插入的节点为链表的新头节点.
// 如果index 等于链表的长度,则说明是新插入的节点为链表的尾结点
// 如果index大于链表的长度,则返回空
if(index > size){
return;
}
if(index < 0){
index = 0;
}
//size++;
//找到要插入节点的前驱,要在第nInsert a contact before each node,要找到第n个节点的前驱
ListNode pre = dummyHead;
for(int i = 0; i < index;i++){ //找第n个节点的前驱节点,没有=
pre = pre.next;
}
ListNode add = new ListNode(val);//Set the node to add
add.next = pre.next; //Setting the node order is important,Set the next node of the newly added node first(即第n个节点)
pre.next = add; //Then set the firstn个节点的后继节点,If set in reverse,then the next node of the newly added node cannot be found(即第n个节点)
size++;
}
public void deleteAtIndex(int index) {
if(index < 0 || index >= size){
return;
}
//size--;
ListNode pre = dummyHead;
for(int i = 0;i < index;i++){ //找第n个节点的前驱节点,没有=
pre = pre.next;
}
pre.next = pre.next.next;
size--;
}
}
/**
* Your MyLinkedList object will be instantiated and called as such:
* MyLinkedList obj = new MyLinkedList();
* int param_1 = obj.get(index);
* obj.addAtHead(val);
* obj.addAtTail(val);
* obj.addAtIndex(index,val);
* obj.deleteAtIndex(index);
*/
Doubly linked list method
//双链表
class MyLinkedList {
class ListNode{
int val;
ListNode next,prev;
ListNode(int x){val = x;}
}
int size;
ListNode head,tail;//定义头指针和尾指针
public MyLinkedList() {
size = 0;
head = new ListNode(0);
tail = new ListNode(0);
head.next = tail;
tail.prev = head;
}
public int get(int index) {
if(index < 0 || index >= size){
return -1;
}
ListNode cur = head;
//通过判断index <(size-1)/2To determine whether to traverse from the head node or the tail node,提高效率
if(index < (size - 1) / 2){
for(int i = 0;i <= index;i++){
cur = cur.next;
}
}else{
cur = tail;
for(int i = 0;i <= size - 1 - index;i++){
cur = cur.prev;
}
}
return cur.val;
}
public void addAtHead(int val) {
addAtIndex(0,val);
}
public void addAtTail(int val) {
addAtIndex(size,val);
}
public void addAtIndex(int index, int val) {
if(index > size){return;}
if(index < 0){index = 0;}
ListNode pre = head;
for(int i = 0;i < index;i++){
pre = pre.next;
}
ListNode add = new ListNode(val);
add.next = pre.next;
pre.next.prev = add;
pre.next = add;
add.prev = pre;
size++;
}
public void deleteAtIndex(int index) {
if(index < 0 || index >= size){return;}
ListNode pre = head;
for(int i = 0;i < index;i++){
pre = pre.next;
}
//pre.next = pre.next.next; 先写这个->错误
pre.next.next.prev = pre; //It is important to set this first,不然无法找到pre.next,Same as the one above
pre.next = pre.next.next;
size--;
}
}
/**
* Your MyLinkedList object will be instantiated and called as such:
* MyLinkedList obj = new MyLinkedList();
* int param_1 = obj.get(index);
* obj.addAtHead(val);
* obj.addAtTail(val);
* obj.addAtIndex(index,val);
* obj.deleteAtIndex(index);
*/
边栏推荐
猜你喜欢
随机推荐
Personal image bed construction based on Alibaba Cloud OSS+PicGo
IDEA2021.2安装与配置(持续更新)
引擎开发日志:场景编辑器开发难点
使用buildroot制作根文件系统(龙芯1B使用)
idea中创建jsp项目详细步骤
DMA相应外设映射
AD实战篇
IDEA2021.2安装与配置(持续更新)
Application of electronic flow on business trip
PCIE电路设计
Flame sensor connected with Arduino
联阳IT66121FN提供SDI转HDMI方案分享
Comparison between Boda Industrial Cloud and Alibaba Cloud
【plang 1.4.6】Plang高级编程语言(发布)
GM7150 CVBS转BT656视频解码芯片详细内容及设计要求
USB HUB USB集线器电路设计
vector的使用和模拟实现:
Type c PD 电路设计
倒排单词
云服务器web项目部署详解