Advertisement

在链表中找第k倒数节点

阅读量:
复制代码
    //链表结点结构
    typedef struct Node
    {
    	int data;
    	struct Node* next;
    }Node;

基于双指针策略,在链表中实现元素的删除操作通常采用分阶段的方法。首先,在链表中找到要删除节点的前驱节点,并计算其后继节点的位置;随后将目标节点的后继节点设置为前驱节点的前驱节点。具体来说,在初始状态下,“快游标”会从头节点出发并向前移动k个单位;随后,“慢游标”也开始移动,并最终抵达链表的倒数第k个节点位置。

复制代码
    int findElem(Node* head,int k)
    {
    	int i=0;
    	Node* phead=head->next;  //带头结点的单链表
    	Node* p=head;
    	while(phead!=NULL)
    	{
    		i++;
    		phead=phead->next;
    		if(i>=k) p=p->next;		//让快指针先走
    	}
    	if(p==head) return 0;
    	else 
    	{
    		printf("%d\n",p->data);
    		return 1;
    }

全部评论 (0)

还没有任何评论哟~