# 打卡第三天 203.移除链表元素、707.设计链表、206.反转链表

## 链表理论基础

// 链表定义
// 单链表
struct ListNode {
int val;  // 节点上存储的元素
ListNode *next;  // 指向下一个节点的指针
ListNode(int x) : val(x), next(NULL) {}  // 节点的构造函数
};


## 203.移除链表元素

/**
* Definition for singly-linked list.
* struct ListNode {
*     int val;
*     ListNode *next;
*     ListNode() : val(0), next(nullptr) {}
*     ListNode(int x) : val(x), next(nullptr) {}
*     ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
// C++中，指针不加星号是引用，加星号是解引用，获取地址的值，所以这里不加星号即可
// 设置一个临时变量，作为虚拟头结点，指向当前结点
ListNode* current = dummyHead;
while(current->next!=NULL){
// 不能current->val，因为没法处理当前节点，只能处理下一个
if(current->next->val==val){
ListNode* temp = current->next;
current->next = temp->next;
delete temp;
}else{
current=current->next;
}
}
}
};


/**
* Definition for singly-linked list.
* public 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 Solution {
public ListNode removeElements(ListNode head, int val) {
ListNode current = dummyHead;
while(current.next!=null){
if(current.next.val==val){
ListNode temp = current.next;
current.next = current.next.next;
}else{
current=current.next;
}
}
}
}


## 707.设计链表

class MyLinkedList {
public:

int val;
val(val),
next(nullptr)
{}
};

// 这里定义的头结点 是一个虚拟头结点，而不是真正的链表头结点
_size = 0;
}

int get(int index) {
if (index > (_size - 1) || index < 0) {
return -1;
}
while(index--){
current=current->next;
}
return current->val;
}

_size++;
}

void addAtTail(int val) {
while(current->next != NULL){
current = current->next;
}
current->next = newNode;
_size++;
}

void addAtIndex(int index, int val) {
if (index > _size || index < 0) {
return;
}
while(index--){
current=current->next;
}
newNode->next = current->next;
current->next = newNode;
_size++;
}

void deleteAtIndex(int index) {
if (index >= _size || index < 0) {
return;
}
while(index--) {
current = current ->next;
}
LinkedNode* tmp = current->next;
current->next = current->next->next;
delete tmp;
_size--;
}

private:
int _size;
};


## 206.反转链表

class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* temp;
ListNode* pre = NULL;
ListNode* current = head;
while(current){
temp = current->next;
current->next=pre;
pre = current;
current = temp;
}
return pre;
}
};


UP更新不错过~
• 0
点赞
• 0
收藏
觉得还不错? 一键收藏
• 打赏
• 0
评论
06-22
08-22
08-29

### “相关推荐”对你有帮助么？

• 非常没帮助
• 没帮助
• 一般
• 有帮助
• 非常有帮助

HoshiDust

¥2 ¥4 ¥6 ¥10 ¥20

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