1.
len-k 化倒数为正数
// 1. len-k
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct LinkNode
{
ElemType val;
struct LinkNode *next;
}LinkNode;
void Print_Rec_Ele_A(LinkNode *L, int k)
{
if (L == NULL || k < 1)
{
return;
}
LinkNode *p = L;
int n = 0;
//计算结点个数
while (p != NULL)
{
n++;
p = p->next;
}
if (k > n)
{
return;
}
p = L;
while (n > k)
{
p = p->next;
n--;
}
printf("%d,\n", p->val);
}
2. 递归遍历
缺点:找到结点数据还要继续遍历,直到遍历完整个链表
//递归处理
int Recursion(LinkNode *p, int k)
{
if (p == NULL)
{
return 0;
}
else
{
int n = Recursion(p->next, k) + 1;
if (n == k)
{
printf("%d \n", p->val);
}
return n;
}
}
void Print_Rec_Ele_B(LinkNode *L, int k)
{
if (L == NULL||k < 1)
{
return;
}
Recursion(L, k);
}
3.双指针
//双指针
void Print_Rec_Ele_C(LinkNode *L, int k)
{
if (L == NULL || k < 1)
{
return;
}
LinkNode *p = L;
LinkNode *cur = L;
while (p != NULL && k--)
{
p = p->next;
}
if (p == NULL)
{
return;
}
while (p != NULL)
{
cur = cur->next;
p = p->next;
}
printf("%d\n", cur->val);
}