comments | difficulty | edit_url |
---|---|---|
true |
Easy |
Implement an algorithm to find the kth to last element of a singly linked list. Return the value of the element.
Note: This problem is slightly different from the original one in the book.
Example:
Input: 1->2->3->4->5 和 k = 2 Output: 4
Note:
k is always valid.
We define two pointers slow
and fast
, both initially pointing to the head node head
. Then the fast
pointer moves forward slow
and fast
pointers move forward together until the fast
pointer points to the end of the list. At this point, the node pointed to by the slow
pointer is the
The time complexity is
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def kthToLast(self, head: ListNode, k: int) -> int:
slow = fast = head
for _ in range(k):
fast = fast.next
while fast:
slow = slow.next
fast = fast.next
return slow.val
/**
* 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 slow = head, fast = head;
while (k-- > 0) {
fast = fast.next;
}
while (fast != null) {
slow = slow.next;
fast = fast.next;
}
return slow.val;
}
}
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
int kthToLast(ListNode* head, int k) {
ListNode* fast = head;
ListNode* slow = head;
while (k--) {
fast = fast->next;
}
while (fast) {
slow = slow->next;
fast = fast->next;
}
return slow->val;
}
};
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func kthToLast(head *ListNode, k int) int {
slow, fast := head, head
for ; k > 0; k-- {
fast = fast.Next
}
for fast != nil {
slow = slow.Next
fast = fast.Next
}
return slow.Val
}
/**
* Definition for singly-linked list.
* class ListNode {
* val: number
* next: ListNode | null
* constructor(val?: number, next?: ListNode | null) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
* }
*/
function kthToLast(head: ListNode | null, k: number): number {
let [slow, fast] = [head, head];
while (k--) {
fast = fast.next;
}
while (fast !== null) {
slow = slow.next;
fast = fast.next;
}
return slow.val;
}
// Definition for singly-linked list.
// #[derive(PartialEq, Eq, Clone, Debug)]
// pub struct ListNode {
// pub val: i32,
// pub next: Option<Box<ListNode>>
// }
//
// impl ListNode {
// #[inline]
// fn new(val: i32) -> Self {
// ListNode {
// next: None,
// val
// }
// }
// }
impl Solution {
pub fn kth_to_last(head: Option<Box<ListNode>>, k: i32) -> i32 {
let mut fast = &head;
for _ in 0..k {
fast = &fast.as_ref().unwrap().next;
}
let mut slow = &head;
while let (Some(f), Some(s)) = (fast, slow) {
fast = &f.next;
slow = &s.next;
}
slow.as_ref().unwrap().val
}
}
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @param {number} k
* @return {number}
*/
var kthToLast = function (head, k) {
let [slow, fast] = [head, head];
while (k--) {
fast = fast.next;
}
while (fast !== null) {
slow = slow.next;
fast = fast.next;
}
return slow.val;
};
/**
* Definition for singly-linked list.
* public class ListNode {
* var val: Int
* var next: ListNode?
* init(_ x: Int, _ next: ListNode? = nil) {
* self.val = x
* self.next = next
* }
* }
*/
class Solution {
func kthToLast(_ head: ListNode?, _ k: Int) -> Int {
var slow = head
var fast = head
var k = k
while k > 0 {
fast = fast?.next
k -= 1
}
while fast != nil {
slow = slow?.next
fast = fast?.next
}
return slow?.val ?? 0
}
}