返回倒数第k个节点
要求:
实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。
给定的 k 保证是有效的。
示例:
输入:1–>2–>3–>4–>5 , k=2
输出:4
解题方法:
方法1:
-
先遍历链表,统计链表的总长度top;
-
定义整数sut,使得sut=top-k+1,计算出正向所指定的节点;
-
通过循环进行遍历,找到sut指定节点,输出该节点的值。
方法2:
-
使用双指针进行求解;
-
开始时,p=head, q=head(p、q均指向头节点);
-
其次对q指针进行移动,移动k次;
-
之后同时对p、q进行移动,直到q.next=null时停止;
-
此时,p.val即为倒数第k个节点的值。
代码1:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public int kthToLast(ListNode head, int k) {
ListNode temp = head;
int top = 0;
while(temp!=null){
top++;
temp = temp.next;
}
int sut = top-k+1;
temp = head;
for(int i=1;i<sut;i++){
temp = temp.next;
}
return temp.val;
}
}
代码2:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public int kthToLast(ListNode head, int k) {
ListNode p = head;
ListNode q = head;
for(int i=0;i<k;i++){
q = q.next;
}
while(q != null){
p = p.next;
q = q.next;
}
return p.val;
}
}