【五月集训】

本文介绍了四个关于链表的编程问题,包括将二进制链表转换为整数、删除链表节点、链表反转以及查找链表中每个节点的最大后继节点。通过分析和代码实现,展示了链表操作的常见思路和技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【五月集训】第十一天作业——矩阵

1290. 二进制链表转整数

分析及思路:链表最后一个位置对应二进制最低位, 以此类推,从头到尾遍历链表, 读取一个值与ans(存储结果)进行或运算, 然后再移位即可。
如: int ans = 0(因为最多30个值, 故int即可), list [1, 0, 0 , 1]
读取第一个数 ans = ans | 1 = 1
读第二个数: ans = (ans<<1)| 0 =(10)2
读第三个数: ans = (ans<<1)| 0 =(100)2
读第四个数: ans = (ans<<1)| 1 =(1001)2

intgetDecimalValue(structListNode* head){
    intans = 0;
    structListNode *cur = head;
    while(cur){
		ans = ans << 1;
        ans |= cur-> val;
        cur = cur->next;
    }
    returnans;
}

237. 删除链表中的结点

分析及思路:通常删除节点, 从前往后遍历,删除即可, 但是此题没有前驱的地址, 因此需要更换思路。 链表存储数据, 删除当前链表后,只是将数据删除, 将待删除节点的后继节点的数值存储到当前节点,然后再删除后继节点即可。(如果一直盯着删除结点的话, 就走进死胡同了)

voiddeleteNode(structListNode* node) {
    structListNode* aft = node->next;
    node->val = aft->val;
    node->next = aft->next;
    aft = NULL;
}

剑指offer II 024. 链表反转

分析及思路:头插法, 从头到尾扫一遍即可

structListNode* reverseList(structListNode* head){
    structListNode *first = NULL, *vtx;
    while(head){
        vtx = head->next;
        head->next = first;
        first = head;
        head = vtx;
    }
    returnfirst;
}

1019. 链表中最大节点

分析及思路:暴力解法, 逐个遍历,每个节点都往后扫一下即可

int* nextLargerNodes(structListNode* head, int* returnSize){
    // 1. get list length
    structListNode* p = head;
    intlength = 0;
    while(p){
        p = p->next;
        length ++;
    }
    // 2. mmalloc a arry store ans
    int *ans = (int *)calloc(length , sizeof(int));
    intind = 0;
    while(head){
        p = head;
        while((p) && (head->val >= p->val)){ //刚开始想错了,导致卡壳
            p = p->next;
        }
            p && (ans[ind] = p->val);
        head = head->next;
        ind++;
    }
    *returnSize = length; // 之前一直错误, 忘记给这个变量赋值-。 -
    returnans;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值