当前位置: 首页 > 科技观察

漫画:如何找到链表的最后第n个节点?

时间:2023-03-22 15:02:55 科技观察

——————第二天————————————————什么意思?我们以下面的链表为例:给定链表的头节点,但我们不知道链表的实际长度,要求我们找到倒数第n个节点。假设n=3,那么要查找的节点就是元素1:队列怎么用?小灰的思路是这样的:1.创建一个长度为n的队列,遍历原链表,让节点一个一个入队:2.当队列满时,将队尾的元素队列出队,新节点入队:3.当链表中的所有节点都遍历完后,队尾元素为倒数第n个节点(因为队列长度为n):——————————————首先,我们创建两个指针P1和P2,P1指向链表的头节点,P2指向链表的正第n个节点(即链表中的第三个节点)theexamplePoint):接下来,我们让指针P1和P2同时向右移动,一步一步,直到指针P2移动到链表的末尾:此时,由于P2指向链表的尾节点,而P1和P2的距离是n-1,所以P1指向的节点就是我们要找的链表的倒数第n个节点:显然,这个方法只需要从头到尾遍历一次链表,并且只用到两个指针,算法的空间复杂度为O(1)。publicclassNthFromEnd{publicstaticNodefindNthFromEnd(Nodehead,intn){Nodep1=head;Nodep2=head;//将p2指针移动到第n个正节点for(inti=1;i