如何利用Java輸出鏈表中倒數(shù)第k個結(jié)點
前言
鏈表是一種數(shù)據(jù)結(jié)構(gòu),和數(shù)組同級。比如,Java中我們使用的ArrayList,其實現(xiàn)原理是數(shù)組。而LinkedList的實現(xiàn)原理就是鏈表了。鏈表在進行循環(huán)遍歷時效率不高,但是插入和刪除時優(yōu)勢明顯
本文主要介紹的是輸出鏈表中倒數(shù)第k個結(jié)點,下面來一起看看詳細的介紹吧
問題描述
給你一個單鏈表,輸出倒數(shù)第k個結(jié)點,如下圖鏈表中,輸出倒數(shù)第k個結(jié)點,比如 k = 2,輸出5這個結(jié)點。

方法一
方法描述
輸出倒數(shù)第k個結(jié)點就是輸出整數(shù)第len - k + 1個結(jié)點,len為鏈表的長度。
動畫演示

代碼如下
/**
* Definition for singly-linked list.
* public class Node {
* int val;
* Node next;
* Node() {}
* Node(int val) { this.val = val; }
* Node(int val, Node next) { this.val = val; this.next = next; }
* }
*/
class Solution {
//計算鏈表的長度
private int size() {
int count = 0;
for(Node p = head;p != null;p = p.next) {
count++;
}
return count;
}
//返回倒數(shù)第k個結(jié)點
public Node outputLastIndexNode(int k) {
//鏈表為空
if (head == null) {
return null;
}
//鏈表長度
int len = size();
//檢測k值
if(k > len || k < 0) {
System.out.println("k值有誤?。?!");
}
Node p = head;
for(int i = 0; i < len - k; i++) {
p = p.next;
}
return p;
}
方法二
方法描述
1)定義一個q變量指向鏈表的第一個結(jié)點,是q變量往后移動k個結(jié)點。
2)定義一個p變量指向鏈表的第一個結(jié)點。
3)p變量和q變量同時循環(huán)往后移動一個結(jié)點,直到q為null。
動畫演示

代碼如下
/**
* Definition for singly-linked list.
* public class Node {
* int val;
* Node next;
* Node() {}
* Node(int val) { this.val = val; }
* Node(int val, Node next) { this.val = val; this.next = next; }
* }
*/
class Solution {
//計算鏈表的長度
private int size() {
int count = 0;
for(Node p = head;p != null;p = p.next) {
count++;
}
return count;
}
//返回倒數(shù)第k個結(jié)點
public Node outputLastIndexNode(int k) {
//鏈表為空
if (head == null) {
return null;
}
//鏈表長度
int len = size();
//檢測k值
if(k > len || k < 0) {
System.out.println("k值有誤?。?!");
}
Node q = head;
//使q往后移動k個結(jié)點
while(k-- > 0) {
q = q.next;
}
Node p = head;
while( q != null) {
q = q.next;
p = p.next;
}
return p;
}
總結(jié)
到此這篇關(guān)于如何利用Java輸出鏈表中倒數(shù)第k個結(jié)點的文章就介紹到這了,更多相關(guān)Java輸出鏈表結(jié)點內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot在項目停止(服務(wù)停止/關(guān)閉退出)之后執(zhí)行的方法
這篇文章主要給大家介紹了SpringBoot在項目停止(服務(wù)停止/關(guān)閉退出)之后執(zhí)行的兩種方法,實現(xiàn)DisposableBean接口和使用@PreDestroy注解,文中有詳細的代碼講解,具有一定的參考價值,需要的朋友可以參考下2023-12-12
JSP服務(wù)器端和前端出現(xiàn)亂碼問題解決方案
深入了解Java中String、Char和Int之間的相互轉(zhuǎn)換
Java實現(xiàn)在線預(yù)覽的示例代碼(openOffice實現(xiàn))
tio-boot?jfinal-plugins框架整合redis示例詳解

