劍指offer系列12---鏈表倒數第k個結點

來源:互聯網
上載者:User

標籤:

【題目】輸入一個鏈表,輸出該鏈表中倒數第k個結點。

【思路】方法3:設定兩個指標,第一個指標先走k-1步,第2個指標開始走,(這時候第一個指標指向第k個)當第一個指標走到尾部時(即走了k步),第一個指標即指向第k個結點。(推薦的方法)

            方法2:先擷取結點個數,再順數第n-k+1個結點 1 2 3 4 5 6

           方法1:先擷取長度,再複製至數組一中,再反序加至數組2中,這時候要輸出倒數第K個數即為數組2中的順數第k-1個數。此處出現的異常不知道該怎麼處理。(我的方法)

  1 package com.exe3.offer;  2   3 /**  4  * 【題目】輸入一個鏈表,輸出該鏈表中倒數第k個結點。  5  * @author WGS  6  *  7  */  8 public class PrinkLinkNode {  9     static class LinkNode{ 10         int val; 11         LinkNode next=null; 12         public LinkNode(int n){ 13             this.val=n; 14         } 15     } 16     //方法3:設定兩個指標,第一個指標先走k-1步,第2個指標開始走,(這時候第一個指標指向第k個)當第一個指標走到尾部時(即走了k步),第一個指標即指向第k個結點。 17     public LinkNode  printLinkNodeFromTail3(LinkNode node,int k){ 18         //異常處理,若頭指標node為空白或者輸入的k結點是0 19         if(node==null||k<=0){ 20              21             System.out.println("invalid"); 22             return null; 23         } 24         LinkNode firstIndex=node;//此處要注意,亮點 25         LinkNode secondIndex=null; 26         for(int i=0;i<k-1;i++){ 27             if(firstIndex!=null){ 28                 firstIndex=firstIndex.next; 29             }else{ 30                 return null; 31             } 32         } 33         //此時第一個指標已經走至第k步 34         secondIndex=node; 35         while(firstIndex.next!=null){ 36             firstIndex=firstIndex.next; 37             secondIndex=secondIndex.next; 38         } 39          40         return secondIndex; 41          42     } 43     //方法2:先擷取結點個數,再順數第n-k+1個結點 1 2 3 4 5 6 44     public LinkNode  printLinkNodeFromTail2(LinkNode node,int k){ 45         LinkNode temp=node; 46         int lenOfNode=0; 47         if(node==null||k<=0){ 48              49             System.out.println("invalid"); 50             return null; 51         } 52         //1 擷取長度 53         while(node!=null){ 54             lenOfNode++;//結點個數 55             node=node.next; 56         } 57         int i=1; 58         //2 順數直至第n-k+1個點 59         while(k<=lenOfNode &&(i!=lenOfNode-k+1)){ 60             i++; 61             temp=temp.next; 62         } 63         //合理 64         if(k<=lenOfNode){ 65             return temp; 66         } 67         return null; 68          69     }         70     //方法1:先擷取長度,再複製至數組一中,再反序加至數組2中,這時候要輸出倒數第K個數即為數組2中的順數第k-1個數。此處出現的異常不知道該怎麼處理。 71     public int  printLinkNodeFromTail(LinkNode node,int k){         72         LinkNode temp=node; 73         int len=0; 74         int m=0; 75         //1 擷取長度 76         while(node!=null){ 77             len++; 78             node=node.next; 79         } 80         if(temp==null||k<0||k>=len){ 81             try { 82                 System.out.println("invalid"); 83             } catch (Exception e) { 84                 // TODO Auto-generated catch block 85                 e.printStackTrace(); 86             } 87         } 88         int[] arr1=new int[len]; 89         while(temp!=null){ 90             arr1[m++]=temp.val; 91             temp=temp.next; 92         } 93         int[] arr2=new int[len]; 94         for(int i=0;i<arr1.length;i++){ 95             arr2[len-1-i]=arr1[i]; 96         } 97         if(k<=len){ 98             return arr2[k-1]; 99         }100         return 0;101         102         103     }104     public static void main(String[] args){105         PrinkLinkNode p=new PrinkLinkNode();106         LinkNode node1=new LinkNode(1);107         LinkNode node2=new LinkNode(2);108         LinkNode node3=new LinkNode(3);109         LinkNode node4=new LinkNode(4);110         LinkNode node5=new LinkNode(5);111         LinkNode node6=new LinkNode(6);112         node1.next=node2;113         node2.next=node3;114         node3.next=node4;115         node4.next=node5;116         node5.next=node6;117         //3118         /*int n=p.printLinkNodeFromTail(node1,8);119         System.out.println(n);*/120         //2121         /*LinkNode node=p.printLinkNodeFromTail2(node1,0);122             if(node!=null){123             System.out.println(node.val);124         }else{125             System.out.println("null");126         }*/127         //3128         LinkNode node=p.printLinkNodeFromTail3(node1,0);129         if(node!=null){130             System.out.println(node.val);131         }else{132             System.out.println("null");133         }134         135     }136     137     138     139     140     141     142     143 }

 

劍指offer系列12---鏈表倒數第k個結點

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.