java 链表中倒数第k个结点
生活随笔
收集整理的這篇文章主要介紹了
java 链表中倒数第k个结点
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1. 題目描述
輸入一個(gè)鏈表,輸出該鏈表中倒數(shù)第k個(gè)結(jié)點(diǎn)。
2. 解體思路
方法一:簡(jiǎn)單來說就是先遍歷整個(gè)鏈表的長(zhǎng)度L,然后根據(jù)k,從頭節(jié)點(diǎn)開始遍歷,到L-k,得到相應(yīng)的節(jié)點(diǎn)。
方法二:兩個(gè)指針,先讓第一個(gè)指針和第二個(gè)指針都指向頭結(jié)點(diǎn),然后再讓第一個(gè)指針走(k-1)步,到達(dá)第k個(gè)節(jié)點(diǎn)。然后兩個(gè)指針同時(shí)往后移動(dòng),當(dāng)?shù)谝粋€(gè)結(jié)點(diǎn)到達(dá)末尾的時(shí)候,第二個(gè)結(jié)點(diǎn)所在位置就是倒數(shù)第k個(gè)節(jié)點(diǎn)了。
3. 代碼實(shí)現(xiàn)
方法一:
class ListNode {int val;ListNode next = null;public ListNode(int val) {this.val = val;} }public class FindKthToTail {public static void main(String[] args) {// 定義節(jié)點(diǎn)ListNode root = new ListNode(0) ;ListNode n1 = new ListNode(3) ;ListNode n2 = new ListNode(5) ;ListNode n3 = new ListNode(6) ;ListNode n4 = new ListNode(7) ;ListNode n5 = new ListNode(9) ;// 連接節(jié)點(diǎn)root.next=n1;n1.next=n2;n2.next=n3;n3.next=n4;n4.next=n5;ListNode tmpnode=FindToTail(root, 5);System.out.println(tmpnode.val);}public static ListNode FindToTail(ListNode head, int k) {if(head==null || k<=0) {return null;} ListNode node=head;int count=0;while(node!=null) {node=node.next;count++;}System.out.println(count);if (count < k) return null;ListNode nodetmp=head;for(int i=0; i<count-k; i++) {nodetmp=nodetmp.next;}return nodetmp;}}方法二:
class ListNode {int val;ListNode next = null;public ListNode(int val) {this.val = val;} }public class FindKthToTail {public static void main(String[] args) {// 定義節(jié)點(diǎn)ListNode root = new ListNode(0) ;ListNode n1 = new ListNode(3) ;ListNode n2 = new ListNode(5) ;ListNode n3 = new ListNode(6) ;ListNode n4 = new ListNode(7) ;ListNode n5 = new ListNode(9) ;// 連接節(jié)點(diǎn)root.next=n1;n1.next=n2;n2.next=n3;n3.next=n4;n4.next=n5;ListNode tmpnode=FindToTail(root, 2); System.out.println(tmpnode.val);}public static ListNode FindToTail(ListNode head, int k) {if(head==null || k<=0) {return null;} ListNode pre=head;ListNode last=head; for(int i=1; i<k; i++) {if(pre.next!=null) {pre=pre.next;}else {return null;}} while(pre.next!=null) {pre=pre.next;last=last.next;} return last;}}運(yùn)行:
7總結(jié)
以上是生活随笔為你收集整理的java 链表中倒数第k个结点的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中的轻量级定时任务调度库:s
- 下一篇: java 调整数组顺序使奇数位于偶数前面