数据结构 ——— 单链表oj题:链表中倒数第K个节点

目录

题目要求

手搓简易链表

代码实现 


题目要求

输入一个链表,输出该链表中的倒数第K个节点(注意:k的值小于等于链表节点的总个数)

举例说明:

输入:k = 2 ; [1,2,3,4,5]

返回值:{4}


手搓简易链表

代码演示:

struct ListNode* n1 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(n1);
struct ListNode* n2 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(n2);
struct ListNode* n3 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(n3);
struct ListNode* n4 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(n4);
struct ListNode* n5 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(n5);

n1->val = 1;
n2->val = 3;
n3->val = 5;
n4->val = 7;
n5->val = 9;

n1->next = n2;
n2->next = n3;
n3->next = n4;
n4->next = n5;
n5->next = NULL;

代码实现

代码演示:

struct ListNode* FindkthToTail(struct ListNode* head, int k)
{
	struct ListNode* slow = head;
	struct ListNode* fast = head;

	while (k--)
	{
		if (fast == NULL)
			return NULL;

		fast = fast->next;
	}

	while (fast != NULL)
	{
		slow = slow->next;
		fast = fast->next;
	}

	slow->next = NULL;

	return slow;
}

代码解析:

代码思路:利用快慢节点指针,slow 和 fast ,fast 节点指针先走 k 步,然后 slow 和 fast 节点指针同时走,当 fast 节点指针走到了 NULL ,那么此时的 slow 节点指针所指向的节点就是倒数第 k 个节点

代码逻辑:fast 先走 k 步,并且要判断是否为空,防止 head 节点指针为空,再 slow 和fast 同时走,最后 slow 就是目标节点的指针,并且要将 sow 的 next 置空,否则就不是打印 倒数第 k 个节点了,就变成了打印从倒数第 k 个节点开始的链表

代码验证:

算法的时间复杂度和空间复杂度:

时间复杂度(大O渐进表示法):O(N)

空间复杂度(大O渐进表示法):O(1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值