大家好,欢迎来到IT知识分享网。
ListNode链表此类里面是:
public class ListNode{
ListNode next=null;
int val;
public ListNode(int val){
this.val=val;
}
}
此类中包含了指向当前值的val,以及指向下一个值的next;
一:一直在纠结:给入的值是一个数组形式的值,但这个类中怎么就只能存放当前值和下一个值呢?
原来:传入的时候也是一个值一个值的传入,而不是一次性的传入了一链儿值。
因此在这里也知道了next!=null的意义:当下一个值不为空的期间内,一直执行此for/while里面的操作。
这么说可能还不是怎么太懂,那就上例题:
将链表反序。1->2-> 3-> 4-> 5 变为 1<-2 <-3 <-4 <- 5
public
class
Solution {
//在这里仿佛是一根虎节鞭,从头到尾一节节进入这个函数中来!!!
public
ListNode ReverseList(ListNode head) {
ListNode pre=next=null;
//当进入的鞭子是无节只有把的
if(head==null)
//那我就什么也不操作,返回无
return null;
while(head!=null){ //我就代表一直让鞭子传入进来,知道最后。
next=head.next; //将下一个值保存起来,因为我要将head.next转换为他的前一个节点pre
head.next=pre; //将head的下一个值指向head的前一个值,完成指向反转!!!
pre=head; //指向反转后,只需将pre移动指向head即可(第一个转向完成了,忒继续进行下一个转向!)
head=next; //继续进行下一个值,完成上述操作
}
return pre;
}
}
再拿一一小题练练手吧:
链表的合并:将两个链表从小到大合并。
例子:{1,3,5,7,9}和{2,4,6,8}两个链表合并了
public
class
Solution {
//传入有两条含有不同大小节的鞭子
public
ListNode ReverseList(ListNode list1,ListNode list2) {
if(list1==null)
return list2;
if(list2==null)
return list1;
//如果list1鞭子中的当前节中的值比list2
鞭子中的当前节小
if(list1.val<=list2.val){
ReverseList(list1.next,list2);
return list1;
}else{
ReverseList(list1,list2.next);
return list2;
}
}
}
总结ListNode的重要思想:
万变不离其宗,最重要的就是ListNode类,类里面的包括next,head和当前值,只要把这三个值的逻辑捋清楚,
那么再是用循环还是不断返回当前链表值,都是进一步事情了!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/11139.html