【链表】一个单向链表,给出头结点,找出倒数第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 }

 

posted @ 2020-04-07 13:39  PennyXia  阅读(571)  评论(0编辑  收藏  举报