链表是数据结构中比较重要的一个知识点,结合leetcode的第二题-两数相加来看看链表的实现。
链表顾名思义就是一种带链子的表,一环扣一环。每一个环节都可分成两个部分,一部分是数据,一部分是指向下一个环节的指针。
如果要定义一个链表环节可以这么做
1 | public class ListNode { |
当我们使用的时候,可以这样
1 | public class Main { |
在leetcode中的题目是这样要求的:
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
1 | 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) |
看看我这修改了无数遍的答案
1 | /** |
看看真正的哑结点的用法
定义结构体
1 | struct ListNode { |
如果引入了哑节点的,函数就可以得到简化,
在调用addNode()函数之前,我们先定义哑节点1
2
3struct ListNode *dummyNode= (struct ListNode*) malloc( sizeof(struct ListNode) );
dummyNode->val = null;
dummyNode->next = null;
使用
1 | ListNode *addNode( ListNode *dummyNode, int num){ // 函数返回的是尾节点 |