LintCode题库问题刷题解法记录
说明
记录自己在lintcode中遇到的问题的一些解法心得,能供自己时长查看
提示:以下是本篇文章正文内容,下面案例可供参考
-------------------------我是分割线------------------------
问题描述以及思路分析
如上图描述的需要把一个单链表转化成顺序表,然后结合题目要求分析主要是考察单链表的遍历和顺序表的赋值,根据下图 的解题要求,可以看出节点类的属性值分别是val和next; a)链表遍历主要也是使用循环遍历,判断节点类是否是空链表以及下一个后继节点是否为空,因为链表的逻辑地址和物理地址不同,物理地址是散点分布的,所以不能像遍历顺序表已用使用下标,而且根据第二个图中的ListNode节点类中也可以看出没有其它的内部方法可以使用;所以根据判断节点的条件可以使用while或者do-while(注意一下两者的区别,前者是先判断再执行,后者是先执行再判断,do-while是至少执行一遍循环体的,所以使用do-while需要先判断一下节点是不是为空)去遍历链表,个人使用的是while循环 b)顺序表的赋值就很简单了,初始化之后使用add方法依次插入节点数据即可 以下是给出的代码
public List toArrayList(ListNode head) { // write your code here List list=new ArrayList<>(); while(head!=null){ list.add(head.val); head=head.next; }; return list; }
public List toArrayList(ListNode head) { // write your code here List list=new ArrayList<>(); if(head!=null){ do{ list.add(head.val); head=head.next; }while(head!=null); } return list; }
|