一、结构体定义:
typedef struct ListNode//定义结点
{
DataType data;
struct ListNode* next;
}ListNode,*PListNode;
typedef struct PList//定义一个成员是指向结点的指针的结构体
{
PListNode PHead;
}PList,*PList;
二、函数实现
思路:定义两个指针a,b,一开始都指向链表的第一个结点,然后让a指针以每次走一个结点的走法,先走k-1步,此时b指针仍然在第一个结点处,这时这两个指针之间相差k-1个结点,然后让两个指针都以每次走一步的走法同时向前走,直到a指针走到尾部,此时b指针所指向的结点,就是链表倒数第k个结点;(个人觉得就是拿了一个k厘米的尺子,从链表的尾部丈量k距离的结点)
PListNode FindKNode(PList PList,int k)
{
PListNode front=NULL;
PListNode back=NULL;
PListNode del=NULL;
int i=0;
assert(PList);
front=PList->PHead;
back=PList->PHead;
if (PList->PHead==NULL||k<=0)//如果是空链表或者k<=0
{
return NULL;
}
else //如果不是空链表,k>0
{
for(i=1;i<k;i++) //front先走到k-1步
{
if (front)
{
front=front->next;
}
else//当k的值大于结点个数
{
return NULL;
}
}
while (front->next)
{
front=front->next;
back=back->next;
}
return back;
}
}