/*
和安迪一样挖地道吧,尽头是希望和自由啊
*/
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
ListNode *L=new ListNode(-1);
L->next=head;
ListNode *slow=L,*fast=head,*r=L;
while(fast!=nullptr)
{
if(fast->val==val)
{
slow->next=fast->next;
fast=slow->next;
}
else{
fast=fast->next;
slow=slow->next;
}
}
return L->next;
}
};
class MyLinkedList {
public:
public:
// 定义链表节点结构体
struct ListNode {
int val;
ListNode* next;
ListNode(int val):val(val), next(nullptr){}
};
//创建链表头节点
ListNode *L=new ListNode(-1);//创建头节点
MyLinkedList() {
}
int get(int index) {
ListNode *p=L;
while(p!=nullptr && index>=0)
{
p=p->next;
index--;
}
if(p==nullptr)
{
return -1;
}
return p->val;
}
void addAtHead(int val) {
ListNode *temp=new ListNode(val);
temp->next=L->next;
L->next=temp;
}
void addAtTail(int val) {//每一次尾插都要遍历整个链表一次找到尾巴,如果可以也可以设置全局的尾指//针
ListNode *r=L;
while(r->next!=nullptr)
{
r=r->next;
}
ListNode *temp=new ListNode(val);
r->next=temp;
}
void addAtIndex(int index, int val) {//第一个节点的index是0
ListNode *temp=new ListNode(val);
if(index<=0)
{
temp->next=L->next;
L->next=temp;
}
else
{
//有两种可能,小于链表长度,大于链表长度
index--;
ListNode *p=L;
while(p!=nullptr && index>=0)
{
p=p->next;
index--;
}
if(p!=nullptr)
{
temp->next=p->next;
p->next=temp;
}
}
}
void deleteAtIndex(int index) {
ListNode *p=L;
while(index>0)
{
p=p->next;
index--;
}
if(p!=nullptr && p->next!=nullptr)
{
p->next=p->next->next;
}
}
};
/**
* 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);
*/
/**
* 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* reverseList(ListNode* head) {
ListNode *slow=nullptr,*fast=head;
while(fast!=nullptr)
{
ListNode *temp=fast;
fast=fast->next;
temp->next=slow;
slow=temp;
}
return slow;
}
};