打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
寻找单链表倒数第n个节点

http://blog.csdn.net/ruizeng88/article/details/6700727

2011

面试中经常出现的编程题之一。

最直接的办法是先遍历一遍单链表,记下链表的节点数,然后再次遍历,直到到达节点数减去n的节点,返回结果。实际情况中若链表数目很多而n相对不大,这种方法需要大约两次遍历。更简单的实现方法是采用双指针。一个指针先从链表头开始步进n步,然后另一个指针从头开始,两个指针一同步进直到达到链表尾。这是第二个指针所指的节点即为链表的倒是第n个节点。实现代码如下:

  1. struct node * lastn(struct node * head, int n){  
  2.     struct node *p, *q;  
  3.     if(n < 1){  
  4.         return NULL;  
  5.     }  
  6.     q = head;  
  7.     while(--n){  
  8.         if(!q->next){  
  9.             return NULL;  
  10.         }  
  11.         q = q->next;  
  12.     }  
  13.     p = head;  
  14.     while(q->next){  
  15.         p = p->next;  
  16.         q = q->next;  
  17.     }  
  18.     return p;  
  19. }  
需要注意一些特殊情况的检查:

1.n大于节点数目

2.参数n为0或者负数

3.参数head为空指针

双链表方法可以实现很多问题的解答,还有一个例子是求单链表是否有环。这时可以使用两个链表,一个步进一步,一个步进两部,如果有环两链表就会相遇。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
单链表翻转
面试不可不会的单链表反转
图的几种存储方式
数据结构之链表操作(单链表,单向循环链表,双向循环链表)查找节点,插入节点,删除节点,更新节点,新建节点,遍历,清空,判断空链表等操作
数据结构之链表与数组(2):单向链表上的简单操作问题 - 博客 - 伯乐在线
详解双向链表的基本操作(C语言)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服