初次了解ListNode,针对ListNode的理解

261 阅读2分钟

关于ListNode


   
   

     
     

      
      

     
     

     
     

      
      

       
       public 
       
       class 
       
       ListNode{
      
      

     
     

     
     

      
      

     
     

     
     

      
      
    
       
       int val;
      
      

     
     

     
     

      
      

     
     

     
     

      
      

       
           ListNode next;        
       
       //链表指向的下一个值的指针
      
      

     
     

     
     

      
      

     
     

     
     

      
      

       
           ListNode(
       
       int x){val = x;}   
       
       //这个方式赋值
      
      

     
     

     
     

      
      

     
     

     
     

      
      

       
       }
      
      

     
     

   
   

我想到的几点事项

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