// 009.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <malloc.h>
struct ListNode
{
int m_nKey;
struct ListNode *m_pNext;
};
struct ListNode *CreatList(int number)
{
struct ListNode *head = NULL;
struct ListNode *cur = NULL;
struct ListNode *temp = NULL;
head = (struct ListNode*)malloc(sizeof(struct ListNode));
if (NULL == head)
{
return NULL;
}
head->m_nKey = 0;
head->m_pNext = NULL;
temp = head;
printf("List data number %d\n", number);
for (int i=0; i<number; i++)
{
cur = (struct ListNode*)malloc(sizeof(struct ListNode));
if (cur == NULL)
{
return NULL;
}
printf("List Id%02d ", i);
printf("Input data ");
scanf("%d", &cur->m_nKey);
cur->m_pNext = NULL;
if (i==0)
{
head = cur;
temp = cur;
}
else
{
cur->m_pNext = NULL;
temp->m_pNext = cur;
}
temp = cur;
}
return head;
}
bool PrintList(struct ListNode* pHead)
{
if (NULL == pHead)
{
return false;
}
int i=0;
struct ListNode* pTemp = pHead;
do
{
++i;
printf("List number: %d Data:%d\n",i, pTemp->m_nKey);
pTemp = pTemp->m_pNext;//pTemp指向下一个节点的指针
} while (pTemp != NULL);//最后一个节点的指针元素为NULL
return true;
}
//获取长度
int GetListLen(struct ListNode* pHead)
{
if (NULL == pHead)
{
return 0;
}
int len = 0;
struct ListNode* pTemp = pHead;
do
{
++len;
pTemp = pTemp->m_pNext;
} while (pTemp != NULL);
return len;
}
//打印出倒数第K个元素,最尾端的元素为倒数第0个
//只能顺序遍历第len-1-k个
void PrintKthData(struct ListNode *pHead, int k)
{
if (NULL == pHead || k > (GetListLen(pHead)-1))
{
return;
}
struct ListNode* pFirst = pHead;
// struct ListNode* pLast = pHead;
// do
// {
// pLast = pLast->m_pNext;
// } while (pLast->m_pNext != NULL);//获得最尾部指针
for (int i=0; i< GetListLen(pHead)-1-k; i++)
{
pFirst=pFirst->m_pNext;
}
printf("Kth data: %d\n", pFirst->m_nKey);
}
//题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。
int main(int argc, char* argv[])
{
struct ListNode* pHead = NULL;
int len = 0;
pHead = CreatList(5);
PrintList(pHead);
len = GetListLen(pHead);
PrintKthData(pHead, 4);
return 0;
}
009-查找链表中倒数第k个结点
最新推荐文章于 2023-01-30 09:00:00 发布