• 【剑指offer】链表倒数第k个节点


    转载请注明出处:http://blog.csdn.net/ns_code/article/details/25662121


        在Cracking the Code Interview上做过了一次,这次在九度OJ上測试,AC。

    题目描写叙述:

    输入一个链表,输出该链表中倒数第k个结点。
    (hint: 请务必使用链表。)

    输入:

    输入可能包括多个測试例子,输入以EOF结束。
    对于每一个測试案例,输入的第一行为两个整数n和k(0<=n<=1000, 0<=k<=1000):n代表将要输入的链表元素的个数,k代表要查询倒数第几个的元素。
    输入的第二行包括n个数t(1<=t<=1000000):代表链表中的元素。

    输出:

    相应每一个測试案例,
    若有结果,输出相应的查找结果。否则,输出NULL。

    例子输入:
    5 2
    1 2 3 4 5
    1 0
    5
    例子输出:
    4
    NULL

        AC代码;

    /***************************************************
    题目描写叙述:
    找到单链表中倒数第n个元素
    ****************************************************/
    
    #include<stdio.h>
    #include<stdlib.h>
    
    typedef struct Node
    {
    	int data;
    	struct Node *pNext;
    }NODE,*PNODE;
    
    /*
    找到单链表中倒数第k个元素
    */
    PNODE FindKthToLast(PNODE pHead,unsigned int k)
    { 
    	if(pHead==NULL || k<1)
    		return NULL;
    	PNODE p1 = pHead;
    	PNODE p2 = pHead;
    	while(p2!=NULL && k>0)
    	{
    		p2 = p2->pNext;
    		k--;
    	}
    	if(k>0)
    		return NULL;
    	while(p2 != NULL)
    	{
    		p1 = p1->pNext;
    		p2 = p2->pNext;
    	}
    	return p1;
    }
    
    int main()
    {
    	int n,k;
    	while(scanf("%d %d",&n,&k) != EOF)
    	{
    		int i,data;
    		scanf("%d",&data);
    		PNODE pHead =(PNODE)malloc(sizeof(NODE));
    		if(pHead == NULL)
    			exit(EXIT_FAILURE);
    		pHead->data = data;
    		pHead->pNext = NULL;
    
    		PNODE pCur = pHead;
    		for(i=0;i<n-1;i++)
    		{
    			scanf("%d",&data);
    			PNODE pNew =(PNODE)malloc(sizeof(NODE));
    			if(pNew == NULL)
    				exit(EXIT_FAILURE);
    			pNew->data = data;
    			pNew->pNext = NULL;
    			pCur->pNext = pNew;
    			pCur = pCur->pNext;
    		}
    
    		PNODE pFind = FindKthToLast(pHead,k);
    		if(pFind == NULL)
    			printf("NULL
    ");
    		else
    			printf("%d
    ",pFind->data);
    	}
    	return 0;
    }
    
    
    

    /**************************************************************
        Problem: 1517
        User: mmc_maodun
        Language: C
        Result: Accepted
        Time:100 ms
        Memory:2496 kb
    ****************************************************************/

  • 相关阅读:
    Docker
    Oracle-----RAC重启步骤 RAC管理(crs_stat、crsctl、srvctl)
    kubernetes 设备插件
    golang signal.Notify 信号,如何优雅的退出
    golang 通过fsnotify监控文件
    Golang中基础的命令行模块urfave/cli的用法说明
    fatal: unable to access 'xxx': Encountered end of file
    client-go 和 golang 源码中的技巧
    Golang之wait.Until 简单测试用例
    go viper 库
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4029004.html
Copyright © 2020-2023  润新知