学习目标:
随机刷题,补充基础知识
学习内容:
链表的基本知识和操作
学习产出:
- 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
题目数据保证列表表示的数字不含前导零
链表概念
链表:链表不限制数据的物理存储状态,换句话说,使用链表存储的数据元素,其物理存储位置是随机的。
链表节点:链表中每个数据的存储都由以下两部分组成:
- 数据元素本身,其所在的区域称为数据域;
- 指向直接后继元素的指针,所在的区域称为指针域;
链表中的每个节点实现:
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;
其他类似,比如节点删除、遍历等。