列表

详情


HJ51. 输出单向链表中倒数第k个结点

描述

输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针。

链表结点定义如下:
struct ListNode
{
    int m_nKey;
    ListNode* m_pNext;
};
正常返回倒数第k个结点指针,异常返回空指针.
要求:
(1)正序构建链表;
(2)构建后要忘记链表长度。
数据范围:链表长度满足 ,链表中数据满足

本题有多组样例输入。



输入描述

输入说明
1 输入链表结点个数
2 输入链表的值
3 输入k的值

输出描述

输出一个整数

示例1

输入:

8
1 2 3 4 5 6 7 8
4

输出:

5

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C 解法, 执行用时: 1ms, 内存消耗: 268KB, 提交时间: 2020-12-02

#include <stdio.h>
#include <stdlib.h>

typedef struct ListNode
{
	int       m_nKey;
	struct ListNode* m_pNext;
} LST ;

int main(void)
{
	int n, k, i, j;
	LST *Last;
	while( scanf("%d", &n)!=EOF )
	{
		LST *Header = (LST *)malloc( sizeof(LST) );
		Header->m_pNext = NULL;
		scanf("%d", Header);
		Last = Header;
		for(i=1; i<n; i++){
			Last->m_pNext = (LST *)malloc( sizeof(LST) );
			scanf("%d", Last->m_pNext);
			Last = Last->m_pNext;
		}
		Last->m_pNext = NULL;
		
		scanf("%d", &k);
		if(k>=1 && (j=n-k)>=0){
			for(i=0; i<j; i++)
			{
				Last = Header->m_pNext;
				free(Header);
				Header = Last;
			}
			printf("%d\n", Header->m_nKey);
		}
		else printf("0\n");
		while(Header)
		{
			Last = Header->m_pNext;
			free(Header);
			Header = Last;
		}
	}
	return 0;
}

C 解法, 执行用时: 1ms, 内存消耗: 312KB, 提交时间: 2020-12-19

#include<stdio.h>
#include<stdlib.h>

typedef struct ListNode
{
int m_nKey;
struct ListNode* m_pNext;
}ListNode;

int main()
{
	int n;
	int num,k;
	int i;
    ListNode* p;
    ListNode* head;
    while(scanf("%d",&n)!=EOF)
    {
    
     p=(ListNode*)malloc(sizeof(ListNode));
	p->m_pNext=NULL;
    head=p;
	for(i=0;i<n;i++)
	{
        scanf("%d",&p->m_nKey);
		p->m_pNext=(ListNode*)malloc(sizeof(ListNode));
		p=p->m_pNext;
	}
	p=NULL;
	p=head;
    scanf("%d",&num);
    k=n-num;
   if(k>=1 && k<=n)
   {
     for(i=0;i<k;i++)
	{
		p=p->m_pNext;
	}
	printf("%d\n",p->m_nKey);
   }
        else{printf("\0\n");}
	p=head;
	for(i=0;i<n;i++)
	{
		
		p=p->m_pNext;
		free(head);
		head=p;
	}
   }
return 0;








}

上一题