求链表中倒数第K个节点,思路很简单我们在遍历时维持两个指针,第一个指针从链表的头指针开始遍历,在第k-1步之前,第二个指针保持不动;在第k-1步开始,第二个指针也开始从链表的头指针开始遍历。由于两个指针的距离保持在k-1,当第一个(走在前面的)指针到达链表的尾结点时,第二个指针(走在后面的)指针正好是倒数第k个结点。
实现代码如下:
基本思路:
(1)将pSlow和pFast同时指向链表的头部
(2)将快指针向后移动K位
(3)快慢指针同时移动,当pFast为空时,pSlow就指向倒数第K个节点
(4)结束
算法:
// FindDaoShuK.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
typedef struct node
{
int data;
struct node* next;
}Node;
Node* create_Link(int num)
{
Node* head,*p,*q;
p=new Node();
p->data=1;
head=p;
for (int i=2;i<=num;i++)
{
q=new Node();
q->data=i;
p->next=q;
p=q;
}
p=NULL;//最后一个节点指向空
return head;
}
Node* FindK(Node* head,int k)
{
Node* pslow,*pfast;
pslow=pfast=head;
int i=0;
while(i<k)
{
pfast=pfast->next;
i++;
}
while(pfast)
{
pfast=pfast->next;
pslow=pslow->next;
}
return pslow;
}
int _tmain(int argc, _TCHAR* argv[])
{
Node* head = create_Link(10);
Node* kNode=FindK(head,2);
cout<<kNode->data<<endl;
system("pause");
return 0;
}
基本思路:
(1)将pSlow和pFast同时指向链表的头部
(2)将快指针向后移动K位
(3)快慢指针同时移动,当pFast为空时,pSlow就指向倒数第K个节点
(4)结束
算法:
// FindDaoShuK.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
typedef struct node
{
int data;
struct node* next;
}Node;
Node* create_Link(int num)
{
Node* head,*p,*q;
p=new Node();
p->data=1;
head=p;
for (int i=2;i<=num;i++)
{
q=new Node();
q->data=i;
p->next=q;
p=q;
}
p=NULL;//最后一个节点指向空
return head;
}
Node* FindK(Node* head,int k)
{
Node* pslow,*pfast;
pslow=pfast=head;
int i=0;
while(i<k)
{
pfast=pfast->next;
i++;
}
while(pfast)
{
pfast=pfast->next;
pslow=pslow->next;
}
return pslow;
}
int _tmain(int argc, _TCHAR* argv[])
{
Node* head = create_Link(10);
Node* kNode=FindK(head,2);
cout<<kNode->data<<endl;
system("pause");
return 0;
}
分享到:
相关推荐
查找链表中倒数第K个节点,源代码验证通过,两种查找方法。
创建一个链表,编程实现查找它的倒数第k个节点
链表中倒数第 k 个节点输入一个链表,输出该链表中倒数第 k 个节点。为了符合大多数人的习惯,本题从 1 开始计数,即链表的尾节点是倒数第 1 个节点。例如,一
链表中倒数第k个节点.md
链表中倒数第 k 个节点输入一个链表,输出该链表中倒数第 k 个节点。为了符合大多数人的习惯,本题从 1 开始计数,即链表的尾节点是倒数第 1 个节点。例如,一
python 删除链表中倒数第N个节点(csdn)————程序
剑指 Offer 22. 链表中倒数第k个节点输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点
剑指 Offer 22. 链表中倒数第k个节点难度:简单题目:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点
剑指Offer(Python多种思路实现):链表中倒数第k个节点 面试22题: 题目:链表中倒数第k个节点 题:输入一个链表,输出该链表中倒数第k个结点。 解题思路一:为了实现只遍历链表一次就能找到倒数第k个节点,我们可以...
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们
python 链表中倒数第k个节点(csdn)————程序
本文实例展示了C++实现输出链表中倒数第k个节点的方法,分享给大家供大家参考之用。 运行本文所述实例可实现输入一个单向链表,输出该链表中倒数第k个节点。 具体实现方法如下: /* * Copyright (c) 2011 ...
问题:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。 例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表...
C CODE FOR :只遍历一遍找出单链表的倒数第K个节点
剑指 Offer 22. 链表中倒数第k个节点难度:简单输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数
删除链表中倒数第N个结点后,返回结果链表的首结点
一次遍历找链表倒数第n个节点是如何写的。
解答一遍历链表两次,第一次获得长度,第二个走(n-k+1)步ListNode* findK(ListNode* head,unsigned int k)解答二双
本文实例为大家分享了python实现单链表中删除倒数第K个节点的具体代码,供大家参考,具体内容如下 题目: 给定一个链表,删除其中倒数第k个节点。 代码: class LinkedListAlgorithms(object): def __init__...