每日一题算法——移除链表元素、反转链表

移除链表元素

力扣题目链接

我的解法:

注意细节:要删掉移除的元素。

c++ 复制代码
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        while(head!=nullptr){
            if(head->val==val){
                head=head->next;
            }
        }
        ListNode* nowhead = head;
        while(nowhead){
            
            if(nowhead->next->val == val){
                if(nowhead->next->next == nullptr){
                    nowhead->next =nullptr;
                }else{
                    nowhead->next=nowhead->next->next;
                }
                
            }
            nowhead = nowhead->next;
        }
        return head;
    }
};

//修改后
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        while(head != NULL && head->val==val){
            ListNode* tmp = head;
            head = head->next;
            delete tmp;
        }
        ListNode* nowhead = head;
        while(nowhead !=NULL && nowhead->next !=NULL ){
            
            if(nowhead->next->val == val){
                    ListNode* tmp=nowhead->next;
                    nowhead->next=nowhead->next->next;
                    delete tmp;
                }else{
                     nowhead = nowhead->next;
                }
                
        }
        return head;
        
    }
};

方法二:

增加一个伪头结点dummyhead,dummyhead->next = head;

这样可以统一头结点和后续节点的删除方式。

c++ 复制代码
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {

        ListNode* dummyhead = new ListNode(0);\\记得定义
        dummyhead->next =head;
        ListNode* nowhead =dummyhead;
        while(nowhead !=NULL && nowhead->next !=NULL ){
            
            if(nowhead->next->val == val){
                    ListNode* tmp=nowhead->next;
                    nowhead->next=nowhead->next->next;
                    delete tmp;
                }else{
                     nowhead = nowhead->next;
                }
                
        }
        return dummyhead->next;
        
    }
};

反转链表

力扣题目链接

c++ 复制代码
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* prev = nullptr;
        ListNode* cur = head;
        while(cur!=nullptr){
            ListNode * tmp = cur->next;
            cur->next =prev;
            prev =cur;
            cur =tmp;
        }
        return prev;
    }
};
相关推荐
LL_xjbt1 分钟前
代码随想录刷题day29
算法·leetcode·动态规划
叶子20242213 分钟前
守护进程实验——autoDL
人工智能·算法·机器学习
半桔42 分钟前
【算法深练】分组循环:“分”出条理,化繁为简
数据结构·c++·算法·leetcode·面试·职场和发展
天天爱吃肉821842 分钟前
【十年技术演进深度解构:车载充电机(OBC)将成为新能源汽车的“能源大脑”】
python·嵌入式硬件·算法·汽车·能源
@Mr_LiuYang1 小时前
Mermaid 绘图--以企业权限视图为例
数据结构·mermaid·结构图·层次权限·权限关系图
KerwinChou_CN1 小时前
自由开发者计划 004:创建一个苹果手机长截屏小程序
图像处理·算法·智能手机·小程序
字节高级特工1 小时前
【Linux篇】0基础之学习操作系统进程
linux·运维·服务器·数据结构·windows·学习·list
012925201 小时前
图简记。。
数据结构·笔记
Kethy__1 小时前
算法分析与设计-动态规划、贪心算法
c++·学习·算法·贪心算法·动态规划
闪电麦坤952 小时前
数据结构:递归:泰勒展开式(Taylor Series Expansion)
数据结构·算法