您的位置:首页 > 其它

给出一个单向链表的头指针,输出该链表中倒数第K个节点的指针

2012-08-21 11:26 567 查看
Q:给出一个单向链表的头指针,输出该链表中倒数第K个节点的指针,链表的倒数第0个节点为链表的尾节点(尾节点的next成员为NULL)

NODE* findnode(NODE *head,unsigned int k);

思路:首先求出单向链表的长度为Len,然后从链表头指针开始遍历,一直遍历Len-1-K次就可以找到倒数第K个节点指针。

代码实现如下:

#include <iostream.h>
#include <assert.h>

typedef struct Node
{
int data;
struct Node *next;
}Node;

//根据提供的数据创建单链表
Node *CreateList(int data[],int n)
{
assert(n>0);
Node *head=new Node;
head->data=data[0];
head->next=NULL;

Node *p=head;

for (int i=1;i<n;i++)
{
Node *p1=new Node;
p1->data=data[i];
p1->next=NULL;
p->next=p1;
p=p1;
}

return head;
}

//获取单链表的长度
int GetListLen(Node *head)
{
int len=0;
while(head)
{
len++;
head=head->next;
}
return len;
}

//选择倒数第K个节点指针
Node *FindNode(Node *head,int k)
{
int len=GetListLen(head);
if (k>len-1)
{
return NULL;
}

int num=len-k-1;
Node *p=head;

while(num)
{
p=p->next;
num--;
}
return p;
}

void main()
{
int data[5]={1,2,3,4,5};
Node *head=CreateList(data,5);
int length=GetListLen(head);
cout<<length<<endl;

Node *temp=FindNode(head,2);
cout<<temp->data<<endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐