#include<iostream>
#include<string>
#include<stdlib.h>
using namespace std;
//链表结点
typedef struct _ListNode{
int data;
struct _ListNode* next;
}ListNode;
ListNode* LinkList_Create(int *value, int num)
{
ListNode *pHead = (ListNode*)malloc(sizeof(ListNode));
ListNode *pTail = pHead;
for(int i = 0; i < num; i++)
{
ListNode *pCur = (ListNode*)malloc(sizeof(ListNode));
pCur->data = value[i];
pTail->next = pCur;
pTail = pCur;
}
pTail->next = NULL;
return pHead;
}
void PrintNode(ListNode *head)
{
ListNode *p = head->next;
for(;p;p = p->next)
{
printf("%d ",p->data);
}
printf("\n");
}
int FindKthToTail(ListNode* pHead, unsigned int k)
{
ListNode *pA = pHead;
ListNode *pB = pHead;
if(pHead == NULL || k == 0)
{
return -1;
}
for(int i = 0; i < k - 1; i++)
{
if(pA->next != NULL)
{
pA = pA->next;
}
else
{
return -2;
}
}
while(pA->next != NULL)
{
pA = pA->next;
pB = pB->next;
}
return pB->data;
}
int FindKthtoList(ListNode *pHead,int k)
{
ListNode *p=pHead->next;
ListNode *q=pHead->next;
while(k>1)
{
p = p->next;
k--;
}
if(p==NULL)
{
return -1;
}
while(p->next!=NULL)
{
p = p->next;
q = q->next;
}
return q->data;
}
int main()
{
int data[7] = {2,3,6,4,5,7,9};
ListNode* pHead = LinkList_Create(data,7);
PrintNode(pHead);
int ret = FindKthToTail(pHead, 3);
//int ret = FindKthtoList(pHead, 3);
printf("%d", ret);
return 0;
}
2、输出链表倒数第K个元素值
最新推荐文章于 2024-07-12 05:04:46 发布