一、力扣203.移除数组元素
1、题目链接:. - 力扣(LeetCode)
隔了很久才写,主要是对虚拟头指针理解不深刻,收获很大的还是应该动手实践下。光看并不能很好记住,看一次两次过两天还是会忘。所以,手敲了几遍,废了点时间,就简短的写下博客吧。
直接上代码吧。
第一种是不用虚拟头节点,对情况进行分类讨论,判断是否为头节点
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
// 删除头结点
while (head != NULL && head->val == val) { // 注意这里不是if
ListNode* tmp = head;
head = head->next;
delete tmp;
}
// 删除非头结点
ListNode* cur = head;
while (cur != NULL && cur->next!= NULL) {
if (cur->next->val == val) {
ListNode* tmp = cur->next;
cur->next = cur->next->next;
delete tmp;
} else {
cur = cur->next;
}
}
return head;
}
};
第二种建立虚拟头节点dummyhead
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
ListNode* dummyHead = new ListNode(0);
dummyHead->next=head;
ListNode *cur=dummyHead;
while(cur->next!=nullptr){
if(cur->next->val==val){
ListNode *tempt=cur->next;
cur->next=tempt->next;
delete tempt;
}else{
cur=cur->next;
}
}
head=dummyHead->next;
delete dummyHead;
return head;
}
};
二、设计链表
1、题目链接:. - 力扣(LeetCode)
2、
主要牢记了链表增删改查的各项操作
class MyLinkedList {
public:
struct LinkedNode{
int val;
LinkedNode *head;
LinkedNode(int val):val(val), next(nullptr){}
}
MyLinkedList() {
_dummyhead=new LinkedNode(0);
_size=0;
}
int get(int index) {
if(index<0||index>(_size-1)){
return -1;
}
LinkedNode *cur=_dummyhead->next;
while(index--){
cur=cur->next;
}
return cur->val;
}
void addAtHead(int val) {
LinkedNode* newNode = new LinkedNode(val);
newNode->next=_dummyhead->next;
_dummyhead->next=newNode;
_size++;
}
void addAtTail(int val) {
LinkedNode *newNode=new LinkedNode(val);
LinkedNode *cur=_dummyhead;
while(cur->next!=NULL){
cur=cur->next;
}
cur->next=newNode;
newNode->next=NULL;
_size++;
}
void addAtIndex(int index, int val) {
LinkedNode* newNode=new LinkedNode(val);
if(index>_size){
return;
}
if(index<0){
index=0;
}
LinkedNode *cur=_dummyhead;
while(index--){
cur=cur->next;
}
newNode->next=cur->next;
cur->next=newNode;
_size++;
}
void deleteAtIndex(int index) {
if(index>=_size||index<0){
return;
}
LinkedNode *cur=_dummyhead;
while(index--){
cur=cur->next;
}
LinkedNode *tempt=cur->next;
cur->next=tempt->next;
delete tempt;
_size--;
}
};