203.移除链表元素
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
ListNode* dummyhead = new ListNode(-1);
dummyhead->next = head;
ListNode* cur = dummyhead->next;
ListNode* pre = dummyhead;
while(cur){
if(cur->val == val){
pre->next = cur->next;
cur = cur->next;
}
else{
cur = cur->next;
pre = pre->next;
}
}
return dummyhead->next;
}
};
707.设计链表
class MyLinkedList {
private:
int size;
ListNode *head;
public:
MyLinkedList() {
this->size = 0;
this->head = new ListNode(0);
}
int get(int index) {
if (index < 0 || index >= size) {
return -1;
}
ListNode *cur = head;
for (int i = 0; i <= index; i++) {
cur = cur->next;
}
return cur->val;
}
void addAtHead(int val) {
addAtIndex(0, val);
}
void addAtTail(int val) {
addAtIndex(size, val);
}
void addAtIndex(int index, int val) {
if (index > size) {
return;
}
index = max(0, index);
size++;
ListNode *pred = head;
for (int i = 0; i < index; i++) {
pred = pred->next;
}
ListNode *toAdd = new ListNode(val);
toAdd->next = pred->next;
pred->next = toAdd;
}
void deleteAtIndex(int index) {
if (index < 0 || index >= size) {
return;
}
size--;
ListNode *pred = head;
for (int i = 0; i < index; i++) {
pred = pred->next;
}
ListNode *p = pred->next;
pred->next = pred->next->next;
delete p;
}
};
不太会做这种题
206.反转链表
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* dummmyhead = new ListNode(-1);
dummmyhead->next = head;
ListNode* pre = nullptr;
ListNode* cur = dummmyhead->next;
while(cur){
ListNode* temp = cur->next;
cur->next = pre;
pre = cur;
cur = temp;
}
return pre;
}
};