Leetcode每日一题

学习目标:

随机刷题,补充基础知识


学习内容:

链表的基本知识和操作


学习产出:

  • leetcode1题
  • 技术博客 1 篇 


题目:

 

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例 1:


输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
示例 2:

输入:l1 = [0], l2 = [0]
输出:[0]
示例 3:

输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]

提示:

每个链表中的节点数在范围 [1, 100] 内
0 <= Node.val <= 9
题目数据保证列表表示的数字不含前导零


链表概念

链表:链表不限制数据的物理存储状态,换句话说,使用链表存储的数据元素,其物理存储位置是随机的。

链表节点:链表中每个数据的存储都由以下两部分组成:

  1. 数据元素本身,其所在的区域称为数据域;
  2. 指向直接后继元素的指针,所在的区域称为指针域;

 链表中的每个节点实现:

typedef struct Link{
    char name;
    struct Link * next;
}link;

头指针:一个普通的指针,特点是永远指向链表第一个节点的位置,很明显,头指针用于指明链表的位置,便于后期找到链表中的数据。

链表的操作

创建节点:

typedef struct list_node{
    int data;
    struct list_node * next;
}single_node;

single_node *create_node(int data){
    single_node *node = NULL;
    node = (single_node *)molloc(sizeof(single_node));
    if(node == NULL){
        printf("molloc fair\n");
    }
    memset(node, 0, sizeof(single_node));
    node->date = data;
    node->next = NULL:
    return node;
}

链表插入元素: 

        单链表尾部插入:

        1. 获取当前节点位置,即头节点

single_list * p = header;

         2. 找到尾部节点:

while(NULL != p->next){
    p = p->next;
}

        3. 插入尾部

p->next = new;

        单链表头部插入:

        1. 获取当前节点位置,也就是头节点

single_list * p = header;

        2. 把要插入的节点的next指向当前的头节点

new->next = p->next;

         3. 把原来的头指针指向新插入的节点

head=new;

其他类似,比如节点删除、遍历等。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值