当前位置: 首页 > 面试题库 >

手写代码:一个单向链表,给出头结点,找出倒数第N个结点,要求O(N)的时间复杂度?

夔光霁
2023-03-14
本文向大家介绍手写代码:一个单向链表,给出头结点,找出倒数第N个结点,要求O(N)的时间复杂度?相关面试题,主要包含被问及手写代码:一个单向链表,给出头结点,找出倒数第N个结点,要求O(N)的时间复杂度?时的应答技巧和注意事项,需要的朋友参考一下

参考回答:

JAVA版本:

public class Solution {
public ListNode FindNthToTail(ListNode head,int N) {
ListNode pre=null,p=null;
//两个指针都指向头结点
p=head;
pre=head;

//记录N值
int a=N;

//记录节点的个数
int count=0;

//p指针先跑,并且记录节点数,当p指针跑了N-1个节点后,pre指针开始跑,
//当p指针跑到最后时,pre所指指针就是倒数第N个节点
while(p!=null){
p=p.next;
count++;
if(N<1){
pre=pre.next;
}
N--;
}

//如果节点个数小于所求的倒数第N个节点,则返回空
if(count<a) return null;
return pre;
}
}

 

C/C++版本:

class Solution {
public:
ListNode* FindNthToTail(ListNode* pListHead, unsigned int N) {
if(pListHead==NULL||N==0)
return NULL;
ListNode*pTail=pListHead,*pHead=pListHead;
for(int i=1;i<N;++i)
{
if(pHead->next!=NULL)
pHead=pHead->next;
else
return NULL;
}
while(pHead->next!=NULL)
{
pHead=pHead->next;
pTail=pTail->next;
}
return pTail;
}
};
Python:
class Solution:
def FindNthToTail(self, head, N):
# write code here
res=[]
while head:
res.append(head)
head=head.next
if N>len(res) or N<1:
return
return res[-N]

 

 类似资料:
  • NowCoder 解题思路 设链表的长度为 N。设置两个指针 P1 和 P2,先让 P1 移动 K 个节点,则还有 N - K 个节点可以移动。此时让 P1 和 P2 同时移动,可以知道当 P1 移动到链表结尾时,P2 移动到第 N - K 个节点处,该位置就是倒数第 K 个节点。 // java public ListNode FindKthToTail(ListNode head, int k

  • 本文向大家介绍n个整数的无序数组,找到每个元素后面比它大的第一个数,要求时间复杂度为O(N) ?相关面试题,主要包含被问及n个整数的无序数组,找到每个元素后面比它大的第一个数,要求时间复杂度为O(N) ?时的应答技巧和注意事项,需要的朋友参考一下  

  • 本文向大家介绍请写出一个函数求出N的阶乘(即N!)相关面试题,主要包含被问及请写出一个函数求出N的阶乘(即N!)时的应答技巧和注意事项,需要的朋友参考一下

  • 我正在寻找一个算法来查找并打印给定圆的交点。每个圆由其中心和半径指定。 O(n2)算法包括检查中心之间的距离是否小于或等于(被比较的两个圆的)半径之和。然而,我正在寻找一个更快的! 一个类似的问题是线段的相交。我想即使我的问题可以解决使用行扫描算法,但我无法弄清楚如何修改事件队列在情况下的圆。

  • 本文向大家介绍Java输出链表倒数第k个节点,包括了Java输出链表倒数第k个节点的使用技巧和注意事项,需要的朋友参考一下 问题描述 输入一个链表,输出该链表中倒数第k个结点。(尾结点是倒数第一个) 结点定义如下: 思路1: 先遍历链表,计算其长度length; 然后计算出倒数第k个结点就是正数第length - k + 1. 最后再遍历链表,找到所求结点 时间复杂度O(2n),需要遍历两次链表

  • 这个问题的正确答案是O(N)。但根据我的说法,答案应该是O(NlogN)。因为第一个“for循环”的复杂度应该是O(logN),因为在每次迭代中变量i被2除,而且我已经研究过,每当循环变量被2乘或除,那么时间复杂度就是O(logN)。现在,对于第二个“for循环”,复杂度应该是O(N),因此,最后一个复杂度应该是O(N*logn)。 谁能解释一下我错在哪里吗?