摘要:這題也是攜程年暑假實習生的筆試題。最開始想的解法就是,先循環求鏈表的長度,再用長度,再循環一次就能移除該結點。結果對的,但是超時了。再返回整個鏈表。
Given a linked list, remove the nth node from the end of list and return its head.
For example,
Given linked list: 1->2->3->4->5, and n = 2.
After removing the second node from the end, the linked list becomes 1->2->3->5.
Note:
Given n will always be valid.
Try to do this in one pass.
這題也是攜程18年暑假實習生的筆試題。
最開始想的解法就是,先循環求鏈表的長度,再用長度-n,再循環一次就能移除該結點。結果對的,但是超時了。代碼如下:
/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } */ /** * @param {ListNode} head * @param {number} n * @return {ListNode} */ var removeNthFromEnd = function(head, n) { let start = new ListNode(null); start.next = head; let len = 0, current = null, del = null; if(head === null){ len = 0; }else{ current = head; len = 1; while(current.next){ len++; } } let position = len - n; if(position > -1 && position < len){ current = head; let previous, index = 0; // 移除第一項 if(position === 0){ head = current.next; }else{ while(index < position){ previous = current; current = current.next; index++; } del = current; previous.next = current.next; } len--; return start.next; }else{ return null; } };
后來看了別人的最佳解法,覺得自己太蠢了。
最佳解法:用兩個指針,第一個指針slow的next指向第一個節點,第二個指針fast指向第n+1個結點,然后兩個指針同時后移,直到fast指針指向null,這個時候slow指針指向要刪除結點的前一個節點,使用slow.next = slow.next.next刪除結點。再返回整個鏈表。代碼如下:
/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } */ /** * @param {ListNode} head * @param {number} n * @return {ListNode} */ var removeNthFromEnd = function(head, n) { var start = new ListNode(null); start.next = head; let slow = start, fast = head; slow.next = head; if(head.next === null){ return null } for(var i = 0; i < n; i++){ fast = fast.next; } while(fast !== null){ slow = slow.next; fast = fast.next; } slow.next = slow.next.next; return start.next; };
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/82115.html
摘要:題目詳情題目要求輸入一個和一個數字。要求我們返回刪掉了倒數第個節點的鏈表。想法求倒數第個節點,我們將這個問題轉化一下。我們聲明兩個指針和,讓和指向的節點距離差保持為。解法使點和點的差距為同時移動和使得到達的末尾刪除倒數第個節點 題目詳情 Given a linked list, remove the nth node from the end of list and return it...
摘要:雖然時間復雜度還是但是顯然我們可以再一次遍歷中完成這個任務?,F在跳出下標的思路,從另一個角度分析??炻濣c之間的距離始終是。當快節點到達終點時,此時的慢節點就是所要刪去的節點。 題目要求 Given a linked list, remove the nth node from the end of list and return its head. For example, ...
摘要:第題給定一個鏈表,刪除鏈表的倒數第個節點,并且返回鏈表的頭結點。因為,若有一個真正的頭結點,則所有的元素處理方式都一樣。但以第一個有效元素為頭結點,就導致算法的不一致,需要單獨處理第一個有效元素頭結點。 leetcode第19題 Given a linked list, remove the n-th node from the end of list and return its h...
摘要:給定一個鏈表,刪除鏈表的倒數第個節點,并且返回鏈表的頭結點。示例給定一個鏈表和當刪除了倒數第二個節點后,鏈表變為說明給定的保證是有效的。值得注意的的是,指向應當刪除的節點并無法刪除它,應當指向該刪除節點的前一個節點。 給定一個鏈表,刪除鏈表的倒數第 n 個節點,并且返回鏈表的頭結點。 Given a linked list, remove the n-th node from the ...
摘要:給定一個鏈表,刪除鏈表的倒數第個節點,并且返回鏈表的頭結點。示例給定一個鏈表和當刪除了倒數第二個節點后,鏈表變為說明給定的保證是有效的。值得注意的的是,指向應當刪除的節點并無法刪除它,應當指向該刪除節點的前一個節點。 給定一個鏈表,刪除鏈表的倒數第 n 個節點,并且返回鏈表的頭結點。 Given a linked list, remove the n-th node from the ...
閱讀 3773·2021-11-23 09:51
閱讀 4386·2021-11-15 11:37
閱讀 3523·2021-09-02 15:21
閱讀 2746·2021-09-01 10:31
閱讀 879·2021-08-31 14:19
閱讀 852·2021-08-11 11:20
閱讀 3308·2021-07-30 15:30
閱讀 1689·2019-08-30 15:54