首页 > 编程语言 >用一个尽可能高效的算法,查找单向链表(有头结点)中倒数第k个位置上的结点

用一个尽可能高效的算法,查找单向链表(有头结点)中倒数第k个位置上的结点

时间:2024-04-24 22:15:21浏览次数:19  
标签:结点 有头 next 链表 Temp2 Temp1 倒数第 指针

image

思路

  定义两个指向链表首结点的指针变量,第一个指针变量向后移动k个位置后,第二个指针变量也开始跟着一起向后移动,直到第一个指针变量指向尾结点为止,第二个指针变量指向的位置结点就是倒数第k个结点。

实现步骤及参考代码(C语言)

int LList_FindLK(LList_t *Head, DataType_t data, int k){
	// 1.定义两个指向首结点的指针变量
	LList_t *Temp1 = Head->next;
	LList_t *Temp2 = Head->next;
	
	// 2.定义一个计数器,判定什么时候到第k个位置
	int count = 0;
	
	// 3.Temp1从首结点开始遍历
	while(Temp1->next != NULL)
	{
		Temp1 = Temp1->next;
		
		// 4.每移动一次,计数器+1
		count++;
		
		// 5.如果计数器的值小于k,说明没有找到第k个位置,返回0
		if(count < k)
		{
			return 0;
		}
		// 6.如果计数器的值大于等于k,Temp2开始跟着Temp1移动
		else
		{
			Temp2 = Temp2->next;
		}
	}
	
	// 7.说明Temp1已经指向尾结点,此时Temp2指向的位置即为倒数第k个结点,输出Temp2的data值并返回1
	printf("单向链表中倒数第k个位置结点的data值为:%d",Temp2->data);
	return 1;
}

标签:结点,有头,next,链表,Temp2,Temp1,倒数第,指针
From: https://www.cnblogs.com/beborn00/p/18156472

相关文章

  • 自定义双向循环链表基本函数接口
    自定义双向循环链表的函数接口/********************************************************************* 文件名称: 双向循环链表的函数接口* 文件作者:[email protected]* 创建日期:2024/04/24* 文件功能:对双向链表的增删改查功能的定义* 注意事项:No......
  • 双向循环链表及各功能函数设计
    双向循环链表/***@filename:双向链表接口设计*@brief*@[email protected]*@date2024/04/24*@version1.0:版本*@property:*@note*CopyRight(c)[email protected]*/构造双向循环链表的结点//指的是双向循......
  • 设计双向链表的接口
    /***********************************************************************************filename:004_双向链表.cauthor:[email protected]:2024/04/24function:设计双向循环链表的接口note:None......
  • 数据结构(双向链表的实现)
    目录一:带头双向链表什么叫双向链表:二:实现声明结构体(1).创建头结点进行初始化(2).动态申请一个结点(3).插入头插入:尾插入指定位置插入(中间插入)4:删除:头删除:尾删除:中间删除:5:打印链表一:带头双向链表什么叫双向链表:结点互相指向的,首结点指向null,尾结点指向null。如果想要提高单......
  • 双向循环连链表的另类实现
    `#include<stdio.h>include<stdlib.h>/**@filename: Untitled-1.c@brief双向链表的另类实现@[email protected]@date2024/04/[email protected]:版本@property:属性介绍@noteCopyRight(c)[email protected]*/typed......
  • 双向循环链表:(创建、插入、遍历、求长、查找、删除、排序、销毁)待测
    目录一、双向循环链表存在的意义二、节点的定义三:实现1:创建链表(即创建一个空链表)2:创建新结点3:遍历4:插入头插入尾插入中间插入一、双向循环链表存在的意义数组这样的结构提供了连续内存的访问和使用,链表是对内存零碎空间的有效组织和使用,双向循环链表增大了访问的自由度。二、......
  • 数据结构-双循环链表的插入
    数据结构-双循环链表插入/*************************************************/***@filename: DcirLLinkInsert*@brief对双向循环链表插入的功能实现*@[email protected]*@date2024/04/24*@version1.0:在下坂本,有何贵干*@property:none......
  • 单向链表的插入、与删除
    链表在C语言中,链表是一种常用的数据结构,它可以用来存储一系列的元素。链表中的每个元素都存储了下一个元素的地址,从而形成了一条链。这种结构使得在插入和删除元素时不需要像数组那样移动大量元素,因此它在插入和删除操作多的情况下有很大的优势。在C语言中,链表可以有多种实现方......
  • 数据结构-双循环链表的插入
    数据结构-双循环链表插入/*************************************************/***@filename: DcirLLinkInsert*@brief对双向循环链表插入的功能实现*@[email protected]*@date2024/04/24*@version1.0:在下坂本,有何贵干*@property:none......
  • 单向循环链表大纲
    单向循环链表大纲/*************************************************************filename:*author:[email protected]*date:2024/04/23*function:*note:None**CopyRight(c)2023-20241987032607......