刪除連結串列中倒數第k個節點
1. 問題描述
給定一個單鏈表,刪除它的倒數第k個節點。例如給定連結串列:
2. 方法與思路
很容易想到第一種方法,就是先對單鏈表進行進行一次遍歷,求出其長度n。然後再進行第二次遍歷,設一個指標,向後移動
第二種方法就是使用雙指標,只需要對連結串列進行一遍訪問即可。
I. ListNode *p=*q=head
II. q指標後移k個位置
III. while q != end
p,q同時後移
IV. 刪除p的下一個節點
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode *pre=head,*end=head;
while(n--) end = end->next;
while(end && end->next) pre = pre->next,end = end->next;
if(end == NULL) return head->next;
else
{
ListNode *tmp = pre->next;
pre->next = tmp->next;
delete tmp;
}
return head;
}
相關推薦
刪除連結串列中倒數第k個節點
1. 問題描述 給定一個單鏈表,刪除它的倒數第k個節點。例如給定連結串列: 1→2→3→4→5,刪除它的倒數第二個節點後變為 1→2→3→5。可以假設倒數第k個節點總是存在。 2. 方法與思路 很容易想到第一種方法,就是先對單鏈表進行進行一次遍
【LeetCode & 劍指offer刷題】連結串列題4:22 刪除連結串列中倒數第k個結點(19. Remove Nth Node From End of List)
【LeetCode & 劍指offer 刷題筆記】目錄(持續更新中...) 19. Remove Nth Node From End of List Given a linked list, remove the n -th node from th
劍指offer____連結串列中倒數第k個節點
輸入一個連結串列,輸出該連結串列中倒數第k個結點。 struct ListNode { int val; struct ListNode *next; ListNode
演算法---輸出單向連結串列中倒數第K個節點
輸出單向連結串列中倒數第K個節點,比如我們現在有int型別的1,2,3,4,5,6,7,8組成的一個單向連結串列,求倒數第三個元素。如圖所示: 我們正常的思路就是從後往前推倒數第K個元素,這裡有這樣幾個問題。首先是單向連結串列的限制,連結
劍指Offer-連結串列中倒數第k個節點
題目描述 輸入一個連結串列,輸出該連結串列中倒數第k個結點。 題解:先統計連結串列的總節點數,然後求出倒數第k個節點是順序遍歷的第幾個節點。可以採用線性表儲存每一個位置的節點,然後查詢則比較快些,不用再遍歷連結串列。 import java.util.ArrayList; import
刪除連結串列的倒數第K個節點(leetcode中級篇第十九題)
給定一個連結串列,刪除連結串列的倒數第 n 個節點,並且返回連結串列的頭結點。 示例: 給定一個連結串列: 1->2->3->4->5, 和 n = 2. 當刪除了倒數第二個節點後,連結串列變為 1->2->3->5.
劍指offer:連結串列中倒數第k個節點
題目描述 輸入一個連結串列,輸出該連結串列中倒數第k個結點。 首先想到的是從頭結點開始遍歷到連結串列的末尾,然後往前回溯k個節點,但是回溯? 這種方式只適用於雙向連結串列,對於單向連結串列,是不可行的。 另外,如果我們已知了連結串列的長度,為n,那麼倒數第k個節點,也
連結串列的初始化以及查詢連結串列中倒數第k個節點的值
package com.xhy.stackandqueue; public class LinkedList { public static class Node { int value; Node next; public Nod
[劍指offer]連結串列中倒數第k個節點
思路: 用兩個指標遍歷,先讓快指標出發,當快指標走過k+1個元素時,慢指標開始移動,直到快指標指向null,慢指標指向的節點即為倒數第k個節點。 實現: /* public class ListNode { int val; ListNode
連結串列中倒數第k個節點
題目描述輸入一個連結串列,輸出該連結串列中倒數第k個結點。下面是我第一次寫的蠢程式碼 複雜度 n+2k/*public class ListNode { int val; ListNode
劍指offer 14:連結串列中倒數第K個節點
方法:雙指標法 right指標先走K步,然後left,right指標一起走,當right = NULL,left指標到倒數第K個節點 #include <iostream> #include <stack> #include <vector> using na
java實現---查詢單鏈表的倒數第K個節點,要求只能遍歷一次連結串列;;;刪除連結串列的倒數第k個節點
java實現 查詢單鏈表的倒數第K個節點,要求只能遍歷一次連結串列 刪除連結串列的倒數第k個節點 查詢單鏈表的倒數第K個節點,要求只能遍歷一次連結串列 定義兩個前後節點forward和backward 先
刪除連結串列的倒數第K個節點(每日一道演算法題)
單向連結串列,刪除它的倒數第K個節點 //節點類 package LinkedList; /** * @author:MindMrWang *2017年11月22日 *:function:連結
leetcode19--刪除連結串列中倒數第n個節點
友情提示,刷leetcode題目的時候,先刷支援率高的題目,這些題目的質量好,我現在按照top 100 like 這個列表中的順序刷題,先把hard以下的刷完。 今天的第二題:刪除連結串列中倒數第n個元素,要求最好是隻遍歷一遍。難度:中等。
python_lintcode_372在O(1)時間複雜度刪除連結串列節點_174刪除連結串列中倒數第n個節點
372在O(1)時間複雜度刪除連結串列節點 題目 給定一個單鏈表中的一個等待被刪除的節點(非表頭或表尾)。請在在O(1)時間複雜度刪除該連結串列節點。 樣例 Linked list is
劍指offer 21. 連結串列中倒數第k個節點
輸入一個連結串列,輸出該連結串列中倒數第k個結點。 注意: k >= 0; 如果k大於連結串列長度,則返回 NULL; 樣例 輸入:連結串列:1->2->3->4->5 ,k=2 輸出:4 可以用兩個相同的指標
查詢連結串列中倒數第k個節點
問題:輸入一個連結串列,輸出該連結串列中倒數第k個節點。為了符合大多數人的習慣,從1開始計數,即連結串列的尾節點是倒數第1個節點。例如,一個連結串列有6個節點,從頭節點開始,它們的值依次是1、2、3、4、5、6。這個連結串列的倒數第3個節點是值為4的節點,連結串列節點定義如下
連結串列---給定一個連結串列,刪除連結串列中倒數第n個節點,返回連結串列的頭節點
連結串列中的節點個數大於等於n 給出連結串列1->2->3->4->5->null和 n = 2. 刪除倒數第二個節點之後,這個連結串列將變成1->2->3->5->null ListNode removeNthF
LintCode 刪除連結串列中倒數第n個節點
/** * Definition of ListNode * class ListNode { * public: * int val; * ListNode *next; * ListNode(int val) { * this->val = va
查詢連結串列中倒數第k個節點,若查詢成功,返回資料域的值
有兩種思路: 思路一:首先遍歷一遍連結串列,得到連結串列長度n,然後返回n-k+1個節點的資料域 思路二:定義兩個指標p和q,都指向頭節點的下一個節點,等到p移動到第k個節點,q和p同步移動,等到p移