【链表】一个单向链表,给出头结点,找出倒数第N个结点(要求O(N)的时间复杂度)
分析:
其实就是p先跑然后标示出p和pre的恒定差,此后一直维持这种恒定差就能在p到最后的时候,pre能指向倒数第N个结点。
思路:
- 定义两个指针p、pre都指向头结点;
- p指针先跑,当p指针跑了N-1个节点后,pre指针再开始跑;
- 当p指针跑到最后时,pre所指指针就是倒数第N个节点。
1 #include <iostream> 2 using namespace std; 3 typedef struct ListNode* List; 4 struct ListNode { 5 int data; 6 List next; 7 }; 8 9 List FindNth(List L,int n) { 10 List p = L, pre = L; 11 //判断n是否合理 12 for (int i = 0; i < n - 1; i++) { 13 if (p->next != NULL) { 14 p = p->next; 15 } 16 else 17 return NULL; 18 } 19 while (p->next != NULL) { 20 pre = pre->next; 21 p = p->next; 22 } 23 return pre; 24 }
作者:PennyXia
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。