前天就刷了大概一道半,有一题一直不理解,也在怀疑是自己的思路,昨天是颓废的一天,没有刷,今天决定要坚持下来,比起不会,我更害怕的是不去回头,我喜欢细品每一道题目,但是有时候却坚持不下来
LC:203
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
if(head==null) return head;
head->next=removeElements(head->next,val);//先递归
return head->val==val? head->next:head;//head节点的值是否是val?是则head->next跳过下一个,否则返回head
调用 removeElements(1 -> 2 -> 6 -> 3 -> 4 -> 5 -> 6, 6)
removeElements(2 -> 6 -> 3 -> 4 -> 5 -> 6, 6)
removeElements(6 -> 3 -> 4 -> 5 -> 6, 6)
removeElements(3 -> 4 -> 5 -> 6, 6)
removeElements(4 -> 5 -> 6, 6)
removeElements(5 -> 6, 6)
removeElements(6, 6)
返回空指针
- 返回
5 -> null
,此时4 -> 5 -> null
- 返回
4 -> 5 -> null
,此时3 -> 4 -> 5 -> null
- 返回
3 -> 4 -> 5 -> null
,此时2 -> 3 -> 4 -> 5 -> null
- 返回
2 -> 3 -> 4 -> 5 -> null
,此时1 -> 2 -> 3 -> 4 -> 5 -> null
LC:237
class Solution {
public:
void deleteNode(ListNode* node) {
node->val=node->next->val;
node->next=node->next->next;//本来还想着用新学的做一下,后来发现这个太爽了
LC:83//寒假刷过一次了
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head){
if(head==nullputr) return head;
ListNode* cur=head;
while(cur){//这里我写错了应该是cur->next 提醒一下自己cur已经指向头结点了,并且开始已经判断过了,所以有点多余了
if(cur->next-val==cur->val){
cur->next=cur->-next>next;
}else
cur=cur->next;
}
rteurn head;
}
LC:21//合并有序链表
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2){
if(l1==null) return l2;
else if(l2==null) return l1;
if(l1->val<l2->val)
l1->next=mergeTwoLists(l1->next,l2)
return l1;
else{
l2->next=mergeTwoLists(l1,l2->next)
return l2;
}
}