1.移除链表元素
LeetCode 203
题目:LeetCode203 | 移除链表元素
直接使用原来的链表来进行删除操作
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
while(head != NULL && head ->val == val){
ListNode *temp = head;
head = head -> next;
delete temp;
}
ListNode *cur = head;
while(cur != NULL && cur -> next != NULL){
if(cur -> next -> val == val){
ListNode *temp = cur -> next;
cur ->next = cur -> next -> next;
delete temp;
}
else{
cur = cur -> next;
}
}
return head;
}
};
设置一个虚拟头结点再进行删除操作
class Solution{
public:
ListNode* removeElements(ListNode* head, int val){
ListNode *dummyHead = (ListNode *)malloc(sizeof(ListNode));
dummyHead -> next = head;
ListNode *cur = dummyHead;
while(cur -> next != NULL){
if(cur -> next -> val == val){
ListNode *temp = cur -> next;
cur ->next = cur -> next -> next;
delete temp;
}
else{
cur = cur -> next;
}
}
head = dummyHead -> next;
free(dummyHead);
return head;
}
};
2.设计链表
LeetCode 707
题目:LeetCode 707 | 设计链表
class MyLinkedList {
public:
struct LinkedNode{
int val;
LinkedNode* next;
LinkedNode(int val) : val(val), next(NULL){}
};
MyLinkedList() {
dummyHead = new LinkedNode(0);
size = 0;
}
int get(int index) {
if(index > (size - 1) || index < 0){
return -1;
}
LinkedNode* cur = dummyHead ->next;
while(index){
cur = cur -> next;
index--;
}
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;
size++;
}
void addAtIndex(int index, int val) {
if(index > size || index < 0)
return;
LinkedNode* newNode = new LinkedNode(val);
LinkedNode* cur = dummyHead;
while(index){
cur = cur -> next;
index--;
}
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;
index--;
}
LinkedNode* temp = cur->next;
cur->next = cur->next->next;
delete temp;
size--;
}
void printLinkedList() {
LinkedNode* cur = dummyHead;
while (cur->next != NULL) {
cout << cur->next->val << " ";
cur = cur->next;
}
cout << endl;
}
private:
int size;
LinkedNode* dummyHead;
};
3.反转链表
LeetCode 206
题目:LeetCode 206 | 反转链表
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* cur = head;
ListNode* pre = NULL;
ListNode* temp = NULL;
while(cur){
temp = cur->next;
cur->next = pre;
pre = cur;
cur = temp;
}
return pre;
}
};