Day | 203. 移除链表元素,707.设计链表,206. 反转链表
203. 移除链表元素
初见思路:为了统一操作,直接自己再写一个 头节点
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
ListNode *vitual=new ListNode;
vitual->next=head;
ListNode *q=vitual;
while(q!=NULL&&q->next!=NULL){
if(q->next->val==val){
ListNode *del=q->next;
q->next=del->next;
delete del;
}
else
q=q->next;
}
head=vitual->next;
delete vitual;
return head;
}
};
也附上分类的代码:
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
while(head!=NULL&&head->val==val){
ListNode *del=head;
head=head->next;
delete del;
}
ListNode *p=head;
while(p!=NULL&&p->next!=NULL){
if(p->next->val==val){
ListNode *del =p->next;
p->next=del->next;
delete del;
}
else
p=p->next;
}
return head;
}
};
707.设计链表
题目链接
红温了,debug了一个小时就是a不了,先放半成品在这。
吃完饭再看 终于改好了。这题一定要细心 看清题目 头节点 是不是下标为0
代码如下:
class MyLinkedList {
public:
struct LinkNode{
int val;
LinkNode *next;
LinkNode(int val):val(val),next(nullptr){}
};
MyLinkedList() {
vitual=new LinkNode(0);
length=0;
}
int get(int index) {
if(index>length-1||index<0)
return -1;
LinkNode *q=vitual->next;
while(index--){
q=q->next;
}
return q->val;
}
void addAtHead(int val) {
LinkNode *q=new LinkNode(val);
q->next=vitual->next;
vitual->next=q;
length++;
}
void addAtTail(int val) {
LinkNode *q=new LinkNode(val);
LinkNode *work=vitual;
while(work->next!=nullptr){
work=work->next;
}
work->next=q;
length++;
}
void addAtIndex(int index, int val) {
if(index>length)
return;
if(index<0)
index=0;
LinkNode *q=new LinkNode(val);
LinkNode *work=vitual;
while(index--){
work=work->next;
}
q->next=work->next;
work->next=q;
length++;
}
void deleteAtIndex(int index) {
if(index>=length||index<0)
return;
LinkNode *work=vitual;
while(index--){
work=work->next;
}
LinkNode *del=work->next;
work->next=del->next;
delete del;
del=nullptr;
length--;
}
private:
int length;
LinkNode *vitual;
};