您的位置:首页 > 其它

算法2:在linked list中找倒数第N个结点

2017-03-01 12:44 169 查看

在linked list中找倒数第N个结点

解题思路:

设置一快一慢指针,快指针先走N步,然后快慢指针同时走,当快指针走到末尾时,慢指针对应的节点就是倒数第N个节点。

LinkList.h添加函数

//获取链表的倒数第n个节点
Node* GetLastNNode(int n);


LinkList.cpp函数实现如下:

Node* LinkList::GetLastNNode(int n)
{
if(head == NULL)
{
cout<<"linklist is empty";
return NULL;
}

if(n <= 0 || n > length)
{
cout<<"n is invalid"<<" n = "<<n<<" length = "<<length<<endl;
return NULL;
}

//p指针先走n步
Node* p = head;
while(p != NULL && n--)
{
p = p->next;
}

Node* q = head;
while(p!= NULL)
{
q = q->next;
p = p->next;
}

return q;
}


测试代码如下:

void test_suanfa_2(LinkList link)
{
int data;

cout<<"pleast input last n to get a node"<<endl;
cin>>data;
Node* nNode = link.GetLastNNode(data);
if(nNode != NULL)
{
cout<<"the last n data is "<< nNode->data<<endl;
}

cout<<"pleast input invlid last n to get a node"<<endl;
cin>>data;
nNode = link.GetLastNNode(data);
if(nNode != NULL)
{
cout<<"the last n data is "<< nNode->data<<endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法
相关文章推荐