摘要:算法思路兩種方法一般反轉(zhuǎn)遞歸法一般解決定義三個指針,分別為,存儲當(dāng)前結(jié)點,指向反轉(zhuǎn)好的結(jié)點的頭結(jié)點,存儲下一結(jié)點信息。遞歸法重點分析先確定終止條件當(dāng)下一結(jié)點為時,返回當(dāng)前節(jié)點判斷當(dāng)前的鏈表是否為遞歸找到尾結(jié)點,將其存儲為頭結(jié)點。
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)鏈表的我們第一能夠想到的方法就是最常用的方法,聲明三個指針,把頭結(jié)點變?yōu)槲步Y(jié)點,然后下一結(jié)點拼接到尾結(jié)點的頭部,一次類推。說白了就是就是直接將鏈表指針反轉(zhuǎn)就可以實現(xiàn)反轉(zhuǎn)鏈表。
兩種方法:
一般反轉(zhuǎn)
遞歸法
一般解決:
1)定義三個指針,分別為 Pnext、pre、current,current 存儲當(dāng)前結(jié)點, pre 指向反轉(zhuǎn)好的結(jié)點的頭結(jié)點,Pnext 存儲下一結(jié)點信息。
2)判斷當(dāng)前結(jié)點是否可以反轉(zhuǎn)(是否為空鏈表或鏈表大于 1 個結(jié)點)?
步驟:
1)Pnext 指針存儲下一結(jié)點 。
2)當(dāng)前結(jié)點的 next 結(jié)點是否為 null (為 null 的話當(dāng)前結(jié)點就是最后的一個結(jié)點),如果為 null,將當(dāng)前節(jié)點賦值為 head 頭指針(斷裂處)。
3)將 pre 指針指向的結(jié)點賦值當(dāng)前節(jié)點 current 的下一結(jié)點 next。
4)然后讓 pre 指針指向當(dāng)前節(jié)點 current。
5)current 繼續(xù)遍歷, 當(dāng)前節(jié)點指向 current 指向 Pnext。
遞歸法(重點分析):
1)先確定終止條件:當(dāng)下一結(jié)點為 null 時,返回當(dāng)前節(jié)點;
2)判斷當(dāng)前的鏈表是否為 null;
3)遞歸找到尾結(jié)點,將其存儲為頭結(jié)點。
4)此時遞歸的層次是第二層遞歸,所以要設(shè)置為頭結(jié)點的下一結(jié)點就是當(dāng)前第二層結(jié)點,并且將第二節(jié)點的下一結(jié)點設(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; } }
時間復(fù)雜度:O(n)。只需遍歷整個鏈表就可以完成反轉(zhuǎn),時間復(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)字符串編寫一個函數(shù),其作用是將輸入的字符串反轉(zhuǎn)過來。輸入字符串以字符數(shù)組的形式給出。如果為奇數(shù),當(dāng)兩個指針相等時,反轉(zhuǎn)完畢。測試用例空字符串。奇數(shù)個數(shù)的字符串。長度為的字符串。考查內(nèi)容對字符串的基本操作。 Time:2019/4/18Title: Reverse StringDifficulty: EasyAuthor: 小鹿 題目:Reverse String(反轉(zhuǎn)字...
摘要:月下半旬攻略道題,目前已攻略題。目前簡單難度攻略已經(jīng)到題,所以后面會調(diào)整自己,在刷算法與數(shù)據(jù)結(jié)構(gòu)的同時,攻略中等難度的題目。 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)字符串里的單詞給定一個字符串,逐個翻轉(zhuǎn)字符串中的每個單詞。說明無空格字符構(gòu)成一個單詞。遇到空格之后,將單詞進行倒序拼接。消除尾部的空格。測試用例空字符串。中間空格大于的字符串。 Time:2019/4/20Title: Reverse Words In a StringDifficulty: MidumnAuthor: 小鹿 題目:Reverse Words In a ...
摘要:先去空白,去掉空白之后取第一個字符,判斷正負(fù)符號,若是英文直接返回,若數(shù)字則不取。回文數(shù)題目描述判斷一個整數(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)一個單鏈表。示例輸入輸出進階你可以迭代或遞歸地反轉(zhuǎn)鏈表。你能否用兩種方法解決這道題解題思路每次遍歷到最后一位取節(jié)點這種方法就算了時間復(fù)雜度太高。從鏈表末尾向頭部逐個分離節(jié)點,并將節(jié)點添加到新鏈表的末尾。與迭代法原理相似。 反轉(zhuǎn)一個單鏈表。 Reverse a singly linked list. 示例: 輸入: 1->2->3->4->5->NULL 輸出: 5->4->3->2...
閱讀 2752·2021-11-22 13:54
閱讀 1097·2021-10-14 09:48
閱讀 2314·2021-09-08 09:35
閱讀 1576·2019-08-30 15:53
閱讀 1189·2019-08-30 13:14
閱讀 627·2019-08-30 13:09
閱讀 2547·2019-08-30 10:57
閱讀 3354·2019-08-29 13:18