如何实现每日编程Day 2中查找链表倒数第k个节点的值?
- 内容介绍
- 文章标签
- 相关推荐
本文共计803个文字,预计阅读时间需要4分钟。
问题描述:已知一个具有表头结点的单链表,节点结构为list。假设该链表只给出了头指针list。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k个位置的节点。
解题思路:
1.使用两个指针,快指针fast和慢指针slow,都指向链表的头节点。
2.快指针先向前移动k个节点,如果快指针移动到链表末尾,说明链表长度小于k,返回错误信息。
3.快指针和慢指针同时向前移动,直到快指针到达链表末尾,此时慢指针指向的就是倒数第k个节点。
4.返回慢指针指向的节点。
代码实现:
pythonclass ListNode: def __init__(self, value=0, next=None): self.value=value self.next=nextdef find_kth_to_last(head, k): if not head or k <=0: return None fast=slow=head for _ in range(k): if fast is None: return None fast=fast.next while fast: fast=fast.next slow=slow.next return slow.value
时间复杂度:O(n),其中n为链表长度。空间复杂度:O(1)。
问题描述
已知一个带有表头结点的单链表,结点结构为:
假设该链表只给出了头指针list。
本文共计803个文字,预计阅读时间需要4分钟。
问题描述:已知一个具有表头结点的单链表,节点结构为list。假设该链表只给出了头指针list。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k个位置的节点。
解题思路:
1.使用两个指针,快指针fast和慢指针slow,都指向链表的头节点。
2.快指针先向前移动k个节点,如果快指针移动到链表末尾,说明链表长度小于k,返回错误信息。
3.快指针和慢指针同时向前移动,直到快指针到达链表末尾,此时慢指针指向的就是倒数第k个节点。
4.返回慢指针指向的节点。
代码实现:
pythonclass ListNode: def __init__(self, value=0, next=None): self.value=value self.next=nextdef find_kth_to_last(head, k): if not head or k <=0: return None fast=slow=head for _ in range(k): if fast is None: return None fast=fast.next while fast: fast=fast.next slow=slow.next return slow.value
时间复杂度:O(n),其中n为链表长度。空间复杂度:O(1)。
问题描述
已知一个带有表头结点的单链表,结点结构为:
假设该链表只给出了头指针list。

