自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

遞歸算法中的鏈表操作

開發(fā) 架構(gòu) 算法
今天我們要講講如何添加自己的操作,是在遞歸調(diào)用之前,還是在遞歸調(diào)用之后。

 今天,打算將問題深入一下,即添加相應(yīng)的操作在遞歸的過程中。

(免責(zé)聲明:下面的解法純屬娛樂 ,另外,示例代碼未經(jīng)編譯和調(diào)試,許多想法未經(jīng)實(shí)踐驗(yàn)證。)

查找鏈表當(dāng)中倒數(shù)第N個(gè)節(jié)點(diǎn)。

解法一

逐層遞歸,遍歷到最后一個(gè)節(jié)點(diǎn),并從返回的節(jié)點(diǎn)一次向后遞歸,遍歷N次,找到倒數(shù)第N個(gè)節(jié)點(diǎn)。

  1. private LNode targetNode = null
  2. private LNode FindLastNthNode(LNode head, int index) 
  3.     if (head.Next == null
  4.     { 
  5.         return head; 
  6.     } 
  7.  
  8.     FindLastNthNode(head.Next, index); 
  9.  
  10.     LNode tmpNode = head; 
  11.  
  12.     while ((head.Next != null) && (index > 0)) 
  13.     { 
  14.         head = head.Next; 
  15.         index--; 
  16.     } 
  17.  
  18.     if (head.Next == null && index == 0) 
  19.     { 
  20.         targetNode = tmpNode; 
  21.         return targetNode; 
  22.     } 
  23.  
  24.     return targetNode; 
  25.  

分析

1. 額外的全局性的輔助變量。

2. 時(shí)間復(fù)雜度為O(index * n),n為鏈表的長(zhǎng)度。

3. 性能開銷較大。

解法二(解法一的變形)

每當(dāng)遍歷到當(dāng)前節(jié)點(diǎn),即再循環(huán)向后遍歷n個(gè),如果節(jié)點(diǎn)遍歷到最后,并且index自減等于0,說明當(dāng)前節(jié)點(diǎn)即為要找的倒數(shù)第n個(gè)。也就是說解法一是從后向前找,而解法二是從前向后找。

  1. private LNode targetNode2 = null
  2.  
  3. private LNode FindLastNthNode2(LNode head, int index) 
  4.     if (head.Next == null
  5.         return head; 
  6.  
  7.     LNode tmpNode = head; 
  8.  
  9.     while (head != null && index >= 0) 
  10.     { 
  11.         head = head.Next; 
  12.         index--; 
  13.     } 
  14.  
  15.     if (head == null && index == 0) 
  16.     { 
  17.         targetNode2 = tmpNode; 
  18.         return targetNode2; 
  19.     } 
  20.  
  21.     return targetNode2; 

分析:與解法一一樣。

解法三

  1. private int counter = 0; 
  2. private LNode targetNode2; 
  3.  
  4. private LNode FindLastNthNode2(LNode head, int index) 
  5.     if (head.Next == null
  6.     { 
  7.         counter = index; 
  8.         return head; 
  9.     } 
  10.  
  11.     FindLastNthNode2(head.Next, index); 
  12.  
  13.     counter--; 
  14.  
  15.     if (counter == 0) 
  16.     { 
  17.         targetNode2 = head; 
  18.         return targetNode2; 
  19.     } 
  20.  
  21.     return targetNode2; 
定義一個(gè)全局變量,用來計(jì)數(shù),當(dāng)遞歸從最后一個(gè)節(jié)點(diǎn)返回時(shí),計(jì)數(shù)器減減,當(dāng)?shù)扔?時(shí),這個(gè)節(jié)點(diǎn)即是要找的倒數(shù)第N個(gè)節(jié)點(diǎn)分析
1. 兩個(gè)輔助變量。
2. 時(shí)間復(fù)雜度為O(n)。
3. 多余的index,累贅的counter。
責(zé)任編輯:彭凡 來源: 博客園
相關(guān)推薦

2021-01-28 07:33:34

JavaScript鏈表數(shù)據(jù)

2020-07-10 08:15:19

遞歸算法函數(shù)

2012-02-22 14:12:08

算法

2009-11-17 16:53:24

PHP遞歸算法

2009-11-30 09:35:15

PHP遞歸算法

2010-04-26 14:43:17

Oracle遞歸條件查

2021-09-15 07:40:50

二叉樹數(shù)據(jù)結(jié)構(gòu)算法

2019-09-18 10:12:37

遞歸數(shù)據(jù)結(jié)構(gòu)

2009-11-18 16:47:50

PHP遞歸算法

2021-04-25 09:42:40

SQL遞歸SQL Server

2023-08-29 09:46:12

SQLCTE遞歸

2019-06-26 09:10:07

操作系統(tǒng)調(diào)度算法

2009-09-02 18:39:34

C#遞歸算法

2020-10-14 08:32:08

算法遞歸面試

2022-01-27 22:50:01

鏈表雙指針結(jié)構(gòu)

2021-08-03 08:13:47

數(shù)據(jù)

2020-03-31 08:37:31

遞歸單鏈表反轉(zhuǎn)

2009-09-28 10:09:09

Linux內(nèi)核Linux循環(huán)鏈表

2009-07-20 17:41:59

Java JDBC

2022-03-15 08:36:46

遞歸查詢SQL
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)