Chinaunix首页 | 论坛 | 博客
  • 博客访问: 136157
  • 博文数量: 38
  • 博客积分: 306
  • 博客等级: 二等列兵
  • 技术积分: 335
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-29 15:19
文章分类

全部博文(38)

文章存档

2013年(23)

2012年(15)

我的朋友

分类: C/C++

2013-07-11 16:54:33

给定两个单链表,头节点为 node head.找出其倒数第 N 个节点。
算法思路: 即为给定两个 Node,起初在 Head 节点向后走的时候,使另外一个节点 node1
托管这个链表的头,在 Head 向后走了 N 个节点后,node1 向后遍历,在 Head 为 Null
时,node1 即指向了倒数第 N 个节点。

程序如下:

点击(此处)折叠或打开

  1. Node * fine_count_down_node(Node *head,int n)
  2. {
  3. int count=0;
  4. Node *p=head;
  5. Node *tmp=head;
  6. if(head==NULL)
  7. return NULL;
  8. while(p!=NULL)
  9. {
  10.     p=p->link;
  11.     count++;
  12. }
  13. if(count<n)
  14. return NULL;
  15. else
  16. {
  17.     p=head;
  18.     count=1;
  19.     while(count!=n)
  20.     {
  21.         p=p->link;
  22.         count++;
  23.     }
  24.     while(p->link!=NULL)
  25.     {
  26.         p=p->link;
  27.         tmp=tmp->link;
  28.     }
  29. }
  30. return tmp;
  31. }
测试:

点击(此处)折叠或打开

  1. Node *root=list_creat( );
  2. printf("%d\n",fine_count_down_node(root,5)->value);
  3. list_destroy(root);
结果:


阅读(1295) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~