203.移除链表元素
重点: 虚拟头节点
没用虚拟头节点的:
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
while(head != NULL && head->val == val){
ListNode* temp = head;
head = head->next;
delete temp;
}
ListNode* prev = NULL;
ListNode* curr = head;
while(curr != NULL){
if(curr->val == val){
prev->next = curr->next;
ListNode* temp = curr;
curr = curr->next;
delete temp;
}else{
prev = curr;
curr = curr->next;
}
}
return head;
}
};
使用虚拟头节点的:
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
//使用一个dummy节点让头节点和别的节点处理方式一样
ListNode* dummy = new ListNode();
dummy->next = head;
ListNode* prev = dummy;
ListNode* curr = head;
while(curr != NULL){
if(curr->val == val){
prev->next = curr->next;
ListNode* temp = curr;
curr = curr->next;
delete temp;
}else{
prev = curr;
curr = curr->next;
}
}
return dummy->next;
}
};
707.设计链表
重点: 创建链表时,创建一个dummy node 方便后续使用
重点复习,代码没写出来
206.反转链表
重点:双指针,一个指向前,一个指向当前
易错点: 最后返回prev,因为curr等于null时退出循环
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* prev = NULL;
ListNode* curr = head;
while(curr != NULL){
ListNode* temp = curr->next;
curr->next = prev;
prev = curr;
curr = temp;
}
return prev;
}
};