[代码随想录算法训练营]刷题笔记 Day 3

203.移除链表元素

移除节点的时后我们必须知道移除的上一个节点,移除的下一个节点。因此比较好的思路是站在所要移除得上一个节点去移除节点。为了保持一致,在头结点比需加入一个虚拟的节点

class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        ListNode* dummy = new ListNode(0, head);
        ListNode* cur = dummy;

        while(cur->next != NULL){
            if(cur->next->val == val){
                ListNode* temp = cur->next;
                cur->next = cur->next->next;
                delete(temp);
            }
            else
                cur = cur->next; //删除得时后不要同时指向后向,以免发生空指针
        }

        return dummy->next;
    }
};

707.设计链表

代补

206.反转链表

要反转列表我们必须知道,上一个节点及现在的节点。反转后,把上一个节点更新到现在的,然后现在的节点更新到下一个节点。

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
     ListNode* pre = NULL;
     ListNode* cur = head;
     ListNode* temp =  NULL;
     while(cur != NULL){
         temp = cur->next;
         cur->next = pre;
         pre = cur;
         cur = temp;
     }

     return pre;
    }
};

你可能感兴趣的:(算法,链表,数据结构)