成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

漫畫:如何找到鏈表的倒數第n個結點?

開發(fā) 前端
給定鏈表的頭結點,但并不知道鏈表的實際長度,要求我們找到鏈表的倒數第n個結點。

 

[[347134]]

 

————— 第二天 —————

 

什么意思呢?我們以下面這個鏈表為例:

 

給定鏈表的頭結點,但并不知道鏈表的實際長度,要求我們找到鏈表的倒數第n個結點。

假設n=3,那么要尋找的結點就是元素1:

 

如何利用隊列呢?小灰的思路如下:

1.創(chuàng)建一個長度為n的隊列,遍歷原始鏈表,讓結點逐一進入隊列:

 

2.當隊列已滿時,讓隊尾元素出隊,新結點入隊:

 

3.當鏈表全部結點遍歷完畢時,隊尾的元素就是倒數第n個結點(因為隊列長度是n):

 

————————————

 

首先,我們創(chuàng)建兩個指針P1和P2,P1指向鏈表的頭結點,P2指向鏈表的正數第n個結點(也就是例子中的第3個結點):

 

接下來,我們讓指針P1和P2同時循環(huán)右移,每次右移一步,直到指針P2移動到鏈表的末尾:

 

此時,由于P2指向鏈表的尾結點,且P1和P2的距離是n-1,因此P1所指的結點就是我們要尋找的鏈表倒數第n個結點:

 

顯然,這個方法從頭到尾只需要對鏈表做一次遍歷,而且僅僅使用了兩個指針,算法的空間復雜度是O(1)。

 

 

  1. public class NthFromEnd { 
  2.     public static Node findNthFromEnd(Node head, int n){ 
  3.         Node p1 = head; 
  4.         Node p2 = head; 
  5.         //把p2指針移動到正數第n個結點 
  6.         for(int i=1; i<n; i++){ 
  7.             p2 = p2.next
  8.             if(p2 == null){ 
  9.                 throw new IllegalArgumentException("參數n超出鏈表長度!"); 
  10.             } 
  11.         } 
  12.         //p1和p2一起右移,直到p2指向鏈表尾結點 
  13.         while (p2.next != null){ 
  14.             p1 = p1.next
  15.             p2 = p2.next
  16.         } 
  17.         return p1; 
  18.     } 
  19.  
  20.     //快速創(chuàng)建鏈表 
  21.     private static Node buildLinkList(int[] array){ 
  22.         Node head = new Node(array[0]); 
  23.         Node p = head; 
  24.         for(int i=1; i<array.length; i++){ 
  25.             p.next = new Node(array[i]); 
  26.             p = p.next
  27.         } 
  28.         return head; 
  29.     } 
  30.  
  31.     //鏈表節(jié)點 
  32.     private static class Node { 
  33.         int data; 
  34.         Node next
  35.  
  36.         Node(int data) { 
  37.             this.data = data; 
  38.         } 
  39.     } 
  40.  
  41.     public static void main(String[] args) { 
  42.         int[] inputs = {5,3,7,2,4,1,9,8}; 
  43.         Node head = buildLinkList(inputs); 
  44.         Node node = findNthFromEnd(head,3); 
  45.         System.out.println("鏈表倒數第3個元素是:" + node.data); 
  46.     } 
  47.  

本文轉載自微信公眾號「程序員小灰」,可以通過以下二維碼關注。轉載本文請聯系程序員小灰公眾號。

 

 

責任編輯:武曉燕 來源: 程序員小灰
相關推薦

2021-08-10 07:57:03

算法鏈表倒數

2022-01-17 09:23:02

LeetCode刪除鏈表算法

2021-04-14 10:19:18

鏈表倒數結點

2021-02-03 13:23:42

鏈表倒數結點

2022-06-01 06:58:41

節(jié)點鏈表倒數

2023-04-17 07:33:11

反轉鏈表移除鏈表

2012-06-19 14:23:04

云計算中國

2021-02-04 08:18:53

LeetCode鏈表

2012-02-17 09:45:04

網速手機

2012-02-17 09:43:13

手機網速移動互聯

2010-11-15 10:49:23

求職

2012-08-10 10:53:03

云計算BSA商業(yè)軟件聯盟

2012-06-18 10:07:17

云計算實力榜

2021-08-26 10:07:25

數組前端元素

2021-04-12 15:47:00

數據結構算法鏈表

2022-03-07 11:03:08

大數據檢測谷歌

2011-08-08 10:53:55

寶德PR2510N云計算

2018-03-01 13:32:28

宏碁游戲本PC行業(yè)

2021-09-22 22:57:41

手機流量通信

2014-11-10 09:29:13

Google
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本视频在线 | 亚洲a在线视频 | 成人午夜影院 | 澳门永久av免费网站 | 九色在线观看 | 国产乱一区二区三区视频 | 中文字幕在线人 | 日本在线中文 | 成人国产午夜在线观看 | 日韩国产欧美视频 | 国产精品久久久亚洲 | 日韩一区二区免费视频 | 亚洲一区二区三区在线 | 一区二区久久 | 亚洲一区二区三区免费视频 | av网站免费观看 | 日日摸夜夜添夜夜添精品视频 | 九九在线视频 | 亚洲国产成人av | 亚洲一区二区三区四区在线观看 | 欧美日韩国产在线观看 | 免费观看一级特黄欧美大片 | 视频三区 | www精品 | 日韩精品在线免费观看视频 | 免费一级片 | 亚洲精品在线视频 | 亚洲最大av网站 | 亚洲一区日韩 | 国产精品区一区二区三 | 成年免费大片黄在线观看一级 | 欧美成人精品 | 激情五月婷婷丁香 | 欧美精品久久久 | 欧美精品一区在线发布 | 激情久久网 | 日本中文字幕在线观看 | 国产激情91久久精品导航 | 91精品国产乱码久久蜜臀 | 亚洲欧洲在线观看视频 | 免费超碰 |