C++实现单链表删除倒数第k个节点的方法
本文实例讲述了C++实现单链表删除倒数第k个节点的方法。分享给大家供大家参考,具体如下:
题目:
删除单链表中倒数第k个节点
解题思路及算法代码:
标尺法,定义两个指针指向链表头结点,先让一个走k步,然后两个指针同时开始走,当先走的指针走到末尾时,后走的指针指向的结点就是需要删除的结点。
单链表结构定义:
typedefstructNode
{
intdata;
structNode*next;
}node,*pLinkedList;
删除倒数第K结点操作代码:
//head表示头结点
Node*removeLastKthNode(pLinkedListhead,intk)
{
if(NULL==head->next||k<1)
returnhead;
pLinkedListcur=head;//1号指针
pLinkedListret=head;//2号指针,指向待删除节点
pLinkedListpre=NULL;//pdel待删除节点的前一个节点
/*
head12345
cur
ret
*/
while(k>0&&cur!=NULL)
{
k--;
cur=cur->next;
}
//当链表走到终点时,k仍然大于0,可知k值大于链表长度
if(k>0&&cur==NULL)
{
cout<<"k值大于链表长度"<next;
ret=ret->next;
}
/*k=2时
head12345NULL
preretcur
即要求删除ret节点
*/
pre->next=ret->next;
free(ret);
ret=NULL;
returnhead;
}
}
希望本文所述对大家C++程序设计有所帮助。