LeetCode——707 设计链表
题目:

总而言之就是要用C++手撸链表,我的代码:
class MyLinkedList {
public:
/** Initialize your data structure here. */
MyLinkedList() {
head = NULL;
size = 0;
}
/** Get the value of the index-th node in the linked list. If the index is invalid, return -1. */
int get(int index) {
if(index<0 || index >= size){
return -1;
}
Node *cur = head;
for(int i=0; i<index; i++){
cur = cur->next;
}
return cur->val;
}
/** Add a node of value val before the first element of the linked list. After the insertion, the new node will be the first node of the linked list. */
void addAtHead(int val) {
Node *newhead = new Node(val, head);
head = newhead;
size++;
}
/** Append a node of value val to the last element of the linked list. */
void addAtTail(int val) {
Node *tail = new Node(val, NULL);
Node *cur = head;
while(cur->next)cur = cur->next;
cur->next = tail;
size++;
}
/** Add a node of value val before the index-th node in the linked list. If index equals to the length of linked list, the node will be appended to the end of linked list. If index is greater than the length, the node will not be inserted. */
void addAtIndex(int index, int val) {
if(index>size){
return;
}
if(index==0||index==-1){
addAtHead(val);
return;
}
if(index==size){
addAtTail(val);
return;
}
Node *cur = head;
for(int i=0; i<index-1; i++){
cur = cur->next;
}
Node *toAdd = new Node(val, cur->next);
cur->next = toAdd;
size++;
}
/** Delete the index-th node in the linked list, if the index is valid. */
void deleteAtIndex(int index) {
if(index<0 || index >= size) return;
Node *cur = head;
if(index == 0){
head = head->next;
size--;
delete cur;
return;
}
for(int i=0; i<index-1; i++){
cur = cur->next;
}
Node *toFree = cur->next;
cur->next = cur->next->next;
delete toFree;
size--;
}
private:
struct Node{
int val;
Node *next;
Node(int x, Node *n): val(x), next(n) {};
};
Node *head;
int size;
};
这题其实很简单,这里的实现方式是单链表,基本上就是数据结构的知识点,所以没什么好提的。但是万恶的LeetCode有这么个测试样例:

也就是说,当输入的index为-1时要当成0来处理,但是这一点题目里面完全没有提及。只需要改一下判定条件就可以了(把void addAtIndex(int index, int val)里的if(index==0)改成if(index==0||index==-1)),除了这个问题之外基本上没什么要注意的了。
LeetCode——707 设计链表的更多相关文章
- Java实现 LeetCode 707 设计链表(环形链表)
707. 设计链表 设计链表的实现.您可以选择使用单链表或双链表.单链表中的节点应该具有两个属性:val 和 next.val 是当前节点的值,next 是指向下一个节点的指针/引用.如果要使用双向链 ...
- LeetCode | 707. 设计链表
设计链表的实现.您可以选择使用单链表或双链表.单链表中的节点应该具有两个属性:val 和 next.val 是当前节点的值,next 是指向下一个节点的指针/引用.如果要使用双向链表,则还需要一个属性 ...
- LeetCode 707 ——设计链表
1. 题目 2. 解答 用一个单链表来实现,只有一个头指针.因为不能建立哨兵结点,因此要特别注意是否在头结点处操作. class MyLinkedList { public: struct ListN ...
- LeetCode——142 设计链表2
题目 代码 class Solution { public: ListNode *detectCycle(ListNode *head) { ListNode *fast = head, *slow ...
- LeetCode——141 设计链表
题目: 简单说下思路: 用两个指针,一个跑得快,一个跑得慢(例如一个每次前进两步,一个前进一步),这样只要快指针不会撞上NULL(如果遇到了NULL的情况那么必然不存在环),快指针肯定会和慢指针碰面( ...
- C#LeetCode刷题-链表
链表篇 # 题名 刷题 通过率 难度 2 两数相加 29.0% 中等 19 删除链表的倒数第N个节点 29.4% 中等 21 合并两个有序链表 C#LeetCode刷题之#21-合并两个有序链 ...
- 【LeetCode】Design Linked List(设计链表)
这道题是LeetCode里的第707到题.这是在学习链表时碰见的. 题目要求: 设计链表的实现.您可以选择使用单链表或双链表.单链表中的节点应该具有两个属性:val 和 next.val 是当前节点的 ...
- [Swift]LeetCode707. 设计链表 | Design Linked List
Design your implementation of the linked list. You can choose to use the singly linked list or the d ...
- LeetCode707:设计链表 Design Linked List
爱写bug (ID:iCodeBugs) 设计链表的实现.您可以选择使用单链表或双链表.单链表中的节点应该具有两个属性:val 和 next.val 是当前节点的值,next 是指向下一个节点的指针/ ...
随机推荐
- 基于maven搭建hibernate运行环境
准备案例需要的数据库表和测试数据 建表语句: create table DEPARTMENT ( DEPT_ID integer not null, DEPT_NAME ) not null, DEP ...
- listen - listen for connections on a socket 在一个套接字上倾听连接
SYNOPSIS 概述 #include <sys/socket.h> int listen(int s, int backlog); DESCRIPTION 描述 在接收连接之前,首先要 ...
- c库函数 rewind fseek
rewind(3) 将文件内部的位置指针重新指向一个流(数据流/文件)的开头 不是文件指针而是文件内部的位置指针 rewind函数作用等同于 (void)fseek(stream, 0L, SEEK_ ...
- Word快捷选取
在word中,你知道鼠标单击选中一个词,双击选中一行,三击选中一个段落吗?
- js用逗号分隔字符串,保留双引号中的字符串
/** * 按逗号分解字符串, 引号中的逗号要保留, 并去除空值. * 方案: 1.将引号中都逗号替换为一个字符串中没有的符号; 2. 用split分解; 3. 去掉空值; 4. 还原引号中的逗号. ...
- 6362. 【NOIP2019模拟2019.9.18】数星星
题目描述 题解 一种好想/好写/跑得比**记者还快的做法: 对所有询问排序,按照R递增的顺序来处理 维护每个点最后一次被覆盖的时间,显然当前右端点为R时的答案为所有时间≥L的点的权值之和 LCT随便覆 ...
- CSS3实现三角形和对话框
这是最终实现的效果,类似于微信对话框的样式. 分析一下这个对话框的结构,由一个小三角形和一个长方形构成.长方形很容易就可以实现,重点是如何用CSS3做出一个小三角形. 一.如何生成一个三角形 总结: ...
- Spring boot @Transactional
1.注解@Transactional 2.异常回滚 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); @Ov ...
- HDU 6287 Just h-index
Time limit 3000 ms Memory limit 132768 kB OS Windows Source CCPC2018-湖南全国邀请赛-重现赛(感谢湘潭大学) 中文题意 一个序列,每 ...
- ubantu apt-get install安装php及开展
.安装php apt-get install libapache2-mod-php5 php5 报错 E: Package 'libapache2-mod-php5' has no installat ...