ListNode链表

        

    ListNode链表此类里面是:

                public class ListNode{

                ListNode next=null;

                int val;

                public ListNode(int val){

                this.val=val;

                        }

            }                

    此类中包含了指向当前值的val,以及指向下一个值的next;

    一:一直在纠结:给入的值是一个数组形式的值,但这个类中怎么就只能存放当前值和下一个值呢?

扫描二维码关注公众号,回复: 3007080 查看本文章

        原来:传入的时候也是一个值一个值的传入,而不是一次性的传入了一链儿值。

                因此在这里也知道了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){
                list1.next= ReverseList(list1.next,list2);
                   //把小的这节丢上去,继续进行有该小的这节鞭子的下一个值进行比对。
                   return list1; 
               }else{
              list2.next= ReverseList(list1,list2.next);
                 return list2; 
               }
        }

    }


总结ListNode的重要思想:

                    万变不离其宗,最重要的就是ListNode类,类里面的包括next,head和当前值,只要把这三个值的逻辑捋清楚,

                    那么再是用循环还是不断返回当前链表值,都是进一步事情了!



 
              

                       




















猜你喜欢

转载自blog.csdn.net/zdj666666/article/details/79898159
今日推荐