leetcode 2 addtwosum

本文介绍了一种解决两个链表相加问题的算法实现,重点讲解如何处理特殊情况,包括链表长度不一、进位处理及尾部节点的新增等细节。

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


题意:2个链表内容相加,链表数据均为个位数,如果相加超过10,则取余,同时下一节点值进1


此题就是要懂得处理特殊情况,如下:

1. 刚输入的l1、l2头节点有可能是空的

2.l1和l2的长度可能不相等

3.l1比l2长,同时l1的后半段一直是9,即后方会不断进1

4. l1和l2即使都遍历结束了,但因为最后节点相加大于10,故应该再新增加一个节点!




/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
    
    int sum,add_num=0,num1,num2;
    struct ListNode *p1,*p2,*l3,*p3;
    l3=(struct ListNode *)malloc(sizeof(struct ListNode));
    p3=l3;
    p1=l1;p2=l2;
    
    if(l1==NULL)  //这段预防刚输入的l1、l2就是空的
        return l2;
    else if(l2==NULL)
        return l1;
    
    while(1)
    {
         //如果为空,则置0,否则置其val,处理有一段链表到头了,另一段没到头
        if(p1==NULL)  
            num1=0;
        else num1=p1->val;
        if(p2==NULL)
            num2=0;
        else num2=p2->val;
        
        
        //相加,取余处理,增值处理
        sum=num1+num2+add_num;
        p3->val=sum%10;
        add_num=sum/10;
        
        
        //如果已经是空了,就不继续向下,一样用于处理某链表到头情况
        if(p1!=NULL)
            p1=p1->next;
        if(p2!=NULL)
            p2=p2->next;
        
        //当二者一起到头时,说明要结束计算了
        if(p1==NULL&&p2==NULL)
        {
            //查看增值是否为1,若是,还需要在尾端加一个节点,值为1
     
            if(add_num==1)
            {
                p3->next=(struct ListNode *)malloc(sizeof(struct ListNode));
                p3->next->val=add_num;
                p3->next->next=NULL;       //记住,尾节点的next必须要初始化为NULL
            }
            else p3->next=NULL;
            
            return l3;
        }
        //建立新的下一个节点,next记得先设为null
        p3->next=(struct ListNode *)malloc(sizeof(struct ListNode));
        p3=p3->next;
        p3->next=NULL;
    }
}


一、综合实战—使用极轴追踪方式绘制信号灯 实战目标:利用对象捕捉追踪和极轴追踪功能创建信号灯图形 技术要点:结合两种追踪方式实现精确绘图,适用于工程制图中需要精确定位的场景 1. 切换至AutoCAD 操作步骤: 启动AutoCAD 2016软件 打开随书光盘中的素材文件 确认工作空间为"草图与注释"模式 2. 绘图设置 1)草图设置对话框 打开方式:通过"工具→绘图设置"菜单命令 功能定位:该对话框包含捕捉、追踪等核心绘图辅助功能设置 2)对象捕捉设置 关键配置: 启用对象捕捉(F3快捷键) 启用对象捕捉追踪(F11快捷键) 勾选端点、中心、圆心、象限点等常用捕捉模式 追踪原理:命令执行时悬停光标可显示追踪矢量,再次悬停可停止追踪 3)极轴追踪设置 参数设置: 启用极轴追踪功能 设置角度增量为45度 确认后退出对话框 3. 绘制信号灯 1)绘制圆形 执行命令:"绘图→圆→圆心、半径"命令 绘制过程: 使用对象捕捉追踪定位矩形中心作为圆心 输入半径值30并按Enter确认 通过象限点捕捉确保圆形位置准确 2)绘制直线 操作要点: 选择"绘图→直线"命令 捕捉矩形上边中点作为起点 捕捉圆的上象限点作为终点 按Enter结束当前直线命令 重复技巧: 按Enter可重复最近使用的直线命令 通过圆心捕捉和极轴追踪绘制放射状直线 最终形成完整的信号灯指示图案 3)完成绘制 验证要点: 检查所有直线是否准确连接圆心和象限点 确认极轴追踪的45度增量是否体现 保存绘图文件(快捷键Ctrl+S)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值