返回倒數第 k 個節點Java版(力扣)
阿新 • • 發佈:2021-01-04
實現一種演算法,找出單向連結串列中倒數第 k 個節點。返回該節點的值。
注意:本題相對原題稍作改動
示例:
輸入: 1->2->3->4->5 和 k = 2
輸出: 4
說明:給定的 k 保證是有效的。
題意:找到單向連結串列的倒數第k個節點,返回該節點的值。
思路:我們可以先從頭遍歷到最後,統計下總共有多少個節點(num),然後我們在遍歷一次,這次遍歷的次數是(num-k),這樣就可以遍歷到倒數第k個節點了,返回該節點的值即可。
正確程式碼:
class Solution {
public int kthToLast(ListNode head, int k) {
int num=1;
ListNode node = head;
while(node.next!=null){
num++;
node =node.next;
}
for(int i=0;i<num-k;i++){
head=head.next;
}
num= head.val;
return num;
}
}
完整程式碼(含測試程式碼):
package com.Keafmd.day0103;
/**
* Keafmd
*
* @ClassName: KthNodeFromEndofList
* @Description: 返回倒數第 k 個節點
* @author: 牛哄哄的柯南
* @date: 2021-01-03 19:08
*/
public class KthNodeFromEndofList {
public static void main(String[] args) {
Solution solution = new Solution();
//建立節點
ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(3);
ListNode node4 = new ListNode(4);
ListNode node5 = new ListNode(5);
//連線成單鏈表
node1.next=node2;
node2.next=node3;
node3.next=node4;
node4.next=node5;
//用result接收返回值
int result = solution.kthToLast(node1,2);
System.out.println(result);
}
}
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
class Solution {
public int kthToLast(ListNode head, int k) {
int num=1; // 記錄節點總數,後面會重複利用num作為返回值,暫存倒數第k個節點的值
//遍歷單向連結串列,統計節點總數
ListNode node = head;
while(node.next!=null){
num++;
node =node.next;
}
//遍歷到倒數第k個節點的位置
for(int i=0;i<num-k;i++){
head=head.next;
}
//用num暫存倒數第k個節點的值,此時的head是倒數第個節點
num= head.val;
return num;
}
}
輸出結果:
4
Process finished with exit code 0
看完如果對你有幫助,感謝點贊支援!
如果你是電腦端,看到右下角的 “一鍵三連” 了嗎,沒錯點它[哈哈]
加油!
共同努力!
Keafmd