链表使用基础——如何创建链表

链表使用基础——如何创建链表

前言

leetcode 题2 两数相加
已知两个非空链表,表示两个非负整数,每位数字都是按照逆序方式存储,每个节点存储一位数字
将这两个数相加,并以相同形式返回一个表示和的链表
假设:除了数字0以外,这两个数不会以0开头
示例:
在这里插入图片描述

建立结果链表

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
    int add = 0;
    struct ListNode* result = NULL;		//结果链表头指针head
    struct ListNode* now = NULL;		//当前节点指针tail

    while(1){
        int a,b,tmp;
        struct ListNode* v = NULL;		//临时节点

        if(l1 != NULL)
            a = l1->val;
        else
            a = 0;

        if(l2 != NULL)
            b = l2->val;
        else
            b = 0;

        tmp = a + b + add;
        
        if(tmp>=10){
            add = tmp/10;
            tmp = tmp%10;
        }else{
            add = 0;
        }

        if(result == NULL){
        	//判断头指针是否为空
        	//为空,则先创建头节点
            result = (struct ListNode*)malloc(sizeof(struct ListNode));
            result->val = tmp;
            result->next = NULL;
            now = result;
        }else{
        	//非 头节点
            v = (struct ListNode*)malloc(sizeof(struct ListNode));
            v->val = tmp;
            v->next = NULL;
            if(now!=NULL){
            	//这里折磨了我一阵子,不加这个now是否为空的判断就会报错,迷惑
                now->next = v;
                now = now->next;
            }
        }

        if(l1 != NULL)
            l1 = l1->next;
        if(l2 != NULL)
            l2 = l2->next;
        
        if(l1 == NULL && l2 == NULL){
        	//题目最大的陷阱所在!!!
        	//在所有位都一一相加后,有可能还会再进一位
        	//实例:9999999+9999(题目示例三,真好心)
            if(add != 0){
                v = (struct ListNode*)malloc(sizeof(struct ListNode));
                v->val = add;
                v->next = NULL;
                if(now!=NULL){
                    now->next = v;
                    now = now->next;
                }
            }
            break;
        }
    }
    return result;
}

总结——如何创建链表(5步)

int main(){
	//1.声明头指针和尾指针
	struct ListNode* head = NULL;
	struct ListNode* tail = NULL;
	...
	//2.增加节点
	//进行判断:头指针是否为空
	if(!head){
		//3.创建头节点
		head = tail = (struct ListNode*)malloc(sizeof(ListNode));
		//编辑头节点head->val...
	}else{
		//4.创建新节点
		tail->next = (struct ListNode*)malloc(sizeof(ListNode));
		//编辑新节点tail->next->val
		//5.更新尾指针
		tail = tail->next
	}
}

题源leetcode题库第二题
本人菜鸡一只,有任何问题欢迎指正,卑微鞠躬

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值