摘要:算法思路兩種方法一般反轉(zhuǎn)遞歸法一般解決定義三個(gè)指針,分別為,存儲當(dāng)前結(jié)點(diǎn),指向反轉(zhuǎn)好的結(jié)點(diǎn)的頭結(jié)點(diǎn),存儲下一結(jié)點(diǎn)信息。遞歸法重點(diǎn)分析先確定終止條件當(dāng)下一結(jié)點(diǎn)為時(shí),返回當(dāng)前節(jié)點(diǎn)判斷當(dāng)前的鏈表是否為遞歸找到尾結(jié)點(diǎn),將其存儲為頭結(jié)點(diǎn)。
Time:2019/4/23
Title: Reverse Linked List
Difficulty: Easy
Author: 小鹿
Reverse a singly linked list.
Example:
Input: 1->2->3->4->5->NULL Output: 5->4->3->2->1->NULL
Follow up:
A linked list can be reversed either iteratively or recursively. Could you implement both?
Solve:1)反轉(zhuǎn)鏈表的我們第一能夠想到的方法就是最常用的方法,聲明三個(gè)指針,把頭結(jié)點(diǎn)變?yōu)槲步Y(jié)點(diǎn),然后下一結(jié)點(diǎn)拼接到尾結(jié)點(diǎn)的頭部,一次類推。說白了就是就是直接將鏈表指針反轉(zhuǎn)就可以實(shí)現(xiàn)反轉(zhuǎn)鏈表。
兩種方法:
一般反轉(zhuǎn)
遞歸法
一般解決:
1)定義三個(gè)指針,分別為 Pnext、pre、current,current 存儲當(dāng)前結(jié)點(diǎn), pre 指向反轉(zhuǎn)好的結(jié)點(diǎn)的頭結(jié)點(diǎn),Pnext 存儲下一結(jié)點(diǎn)信息。
2)判斷當(dāng)前結(jié)點(diǎn)是否可以反轉(zhuǎn)(是否為空鏈表或鏈表大于 1 個(gè)結(jié)點(diǎn))?
步驟:
1)Pnext 指針存儲下一結(jié)點(diǎn) 。
2)當(dāng)前結(jié)點(diǎn)的 next 結(jié)點(diǎn)是否為 null (為 null 的話當(dāng)前結(jié)點(diǎn)就是最后的一個(gè)結(jié)點(diǎn)),如果為 null,將當(dāng)前節(jié)點(diǎn)賦值為 head 頭指針(斷裂處)。
3)將 pre 指針指向的結(jié)點(diǎn)賦值當(dāng)前節(jié)點(diǎn) current 的下一結(jié)點(diǎn) next。
4)然后讓 pre 指針指向當(dāng)前節(jié)點(diǎn) current。
5)current 繼續(xù)遍歷, 當(dāng)前節(jié)點(diǎn)指向 current 指向 Pnext。
遞歸法(重點(diǎn)分析):
1)先確定終止條件:當(dāng)下一結(jié)點(diǎn)為 null 時(shí),返回當(dāng)前節(jié)點(diǎn);
2)判斷當(dāng)前的鏈表是否為 null;
3)遞歸找到尾結(jié)點(diǎn),將其存儲為頭結(jié)點(diǎn)。
4)此時(shí)遞歸的層次是第二層遞歸,所以要設(shè)置為頭結(jié)點(diǎn)的下一結(jié)點(diǎn)就是當(dāng)前第二層結(jié)點(diǎn),并且將第二節(jié)點(diǎn)的下一結(jié)點(diǎn)設(shè)置為 bull。
1)鏈表是空鏈表。2)當(dāng)前鏈表的長度小于等于 1。
3)輸入長度大于 1 的鏈表。
const reverseList = (head)=>{ if(head == null || head.next == null){ return head; }else{ let newhead = reverseList(head.next); head.next.next = head; head.next = null; return newhead; } }
時(shí)間復(fù)雜度:O(n)。只需遍歷整個(gè)鏈表就可以完成反轉(zhuǎn),時(shí)間復(fù)雜度為 O(n)。
空間復(fù)雜度:O(1)。只需要常量級的空間,空間復(fù)雜度為 O(1)。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/103970.html
摘要:小鹿題目反轉(zhuǎn)字符串編寫一個(gè)函數(shù),其作用是將輸入的字符串反轉(zhuǎn)過來。輸入字符串以字符數(shù)組的形式給出。如果為奇數(shù),當(dāng)兩個(gè)指針相等時(shí),反轉(zhuǎn)完畢。測試用例空字符串。奇數(shù)個(gè)數(shù)的字符串。長度為的字符串。考查內(nèi)容對字符串的基本操作。 Time:2019/4/18Title: Reverse StringDifficulty: EasyAuthor: 小鹿 題目:Reverse String(反轉(zhuǎn)字...
摘要:月下半旬攻略道題,目前已攻略題。目前簡單難度攻略已經(jīng)到題,所以后面會調(diào)整自己,在刷算法與數(shù)據(jù)結(jié)構(gòu)的同時(shí),攻略中等難度的題目。 Create by jsliang on 2019-07-30 16:15:37 Recently revised in 2019-07-30 17:04:20 7 月下半旬攻略 45 道題,目前已攻略 100 題。 一 目錄 不折騰的前端,和咸魚有什么區(qū)別...
摘要:小鹿題目翻轉(zhuǎn)字符串里的單詞給定一個(gè)字符串,逐個(gè)翻轉(zhuǎn)字符串中的每個(gè)單詞。說明無空格字符構(gòu)成一個(gè)單詞。遇到空格之后,將單詞進(jìn)行倒序拼接。消除尾部的空格。測試用例空字符串。中間空格大于的字符串。 Time:2019/4/20Title: Reverse Words In a StringDifficulty: MidumnAuthor: 小鹿 題目:Reverse Words In a ...
摘要:先去空白,去掉空白之后取第一個(gè)字符,判斷正負(fù)符號,若是英文直接返回,若數(shù)字則不取。回文數(shù)題目描述判斷一個(gè)整數(shù)是否是回文數(shù)。回文數(shù)是指正序從左向右和倒序從右向左讀都是一樣的整數(shù)。 JS算法題之leetcode(1~10) 前言 一直以來,前端開發(fā)的知識儲備在數(shù)據(jù)結(jié)構(gòu)以及算法層面是有所暫缺的,可能歸根于我們的前端開發(fā)的業(yè)務(wù)性質(zhì),但是我認(rèn)為任何的編程崗位都離不開數(shù)據(jù)結(jié)構(gòu)以及算法。因此,我作為...
摘要:反轉(zhuǎn)一個(gè)單鏈表。示例輸入輸出進(jìn)階你可以迭代或遞歸地反轉(zhuǎn)鏈表。你能否用兩種方法解決這道題解題思路每次遍歷到最后一位取節(jié)點(diǎn)這種方法就算了時(shí)間復(fù)雜度太高。從鏈表末尾向頭部逐個(gè)分離節(jié)點(diǎn),并將節(jié)點(diǎn)添加到新鏈表的末尾。與迭代法原理相似。 反轉(zhuǎn)一個(gè)單鏈表。 Reverse a singly linked list. 示例: 輸入: 1->2->3->4->5->NULL 輸出: 5->4->3->2...
閱讀 2722·2021-11-22 13:54
閱讀 1063·2021-10-14 09:48
閱讀 2292·2021-09-08 09:35
閱讀 1550·2019-08-30 15:53
閱讀 1166·2019-08-30 13:14
閱讀 606·2019-08-30 13:09
閱讀 2521·2019-08-30 10:57
閱讀 3334·2019-08-29 13:18