初次了解ListNode,针对ListNode的理解及C语言中.和->区别

19 篇文章 0 订阅

参考https://blog.csdn.net/qq_38271904/article/details/104603307

关于ListNode

public class ListNode{

    int val;
    ListNode next;        //链表指向的下一个值的指针
    ListNode(int x){val = x;}   //这个方式赋值
}

我想到的几点事项

定义链表ListNode时,

1.链表的首个值不能为0,当首个参数为0时,代表着链表为空。
只需要定义一个ListNode xx = new ListNode(0);即可。即只定义一个空链表。
不需要定义长度 。
2.赋值时
通过xx.next = new ListNode(4);来赋值,注意此时是赋值给下一个指针指向的位置,此时此链表一个值,值为4。
通过一个链表指向原链表地址,赋值完成时,打印原链表的指针地址。获取所有值。(后面的打印想不太明白,有待研究)
3.取值时
取第一个值时,只需要xx.val即可。
取第二或之后的值时,需要xx = xx.next;int x = xx.val;这个方式取值。**

下面是LeetCode第二题时的解,通过这个解来了解更容易理解。

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 两个已知链表对象ListNode l1, ListNode l2
输出:7 -> 0 -> 8
原因:342 + 465 = 807

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode xList = new ListNode(0);//上来链表为空,所以第一位为0
        ListNode newList = xList;
        System.out.println(xList + "==" + newList);
        int curr = 0;
        while(l1 != null || l2 != null){
            //取值
            int x = l1 != null?l1.val:0;
            int y = l2 != null?l2.val:0;
            //System.out.println(x + "==" + y);
            //计算
            int sum = curr + x + y;
            //存值
            curr = sum /10;//取整
            newList.next = new ListNode(sum%10);//取余先给下一个位置赋值
            //移动指针指向下一个值
            newList = newList.next;
            System.out.println(xList + "==" + newList + "==" + xList.next);
            //System.out.println(newList.val);
            //取下一个节点的指针
            if(l1 != null)l1 = l1.next;
            if(l2 != null)l2 = l2.next;
        }
 
        if(curr > 0){
            newList.next = new ListNode(curr);
        }
        return xList.next;
    }
}

打印出来的结果

ListNode@52cc8049==ListNode@52cc8049

ListNode@52cc8049==ListNode@133314b==ListNode@133314b ListNode@52cc8049==ListNode@b1bc7ed==ListNode@133314b ListNode@52cc8049==ListNode@7cd84586==ListNode@133314b

[7, 0, 8]

图示
在这里插入图片描述

C语言中.和->区别

结构体变量用 . 运算符来访问结构体的成员

struct A
{
int a;
int b;
};
 
A object;
object.a = 1;

指向结构体的指针用->来访问其指向的结构体的成员

A *point = malloc(sizeof(struct A));
point->a = 1;
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值