1. 程式人生 > >刪除連結串列中倒數第k個節點

刪除連結串列中倒數第k個節點

1. 問題描述

  給定一個單鏈表,刪除它的倒數第k個節點。例如給定連結串列: 12345,刪除它的倒數第二個節點後變為 1235。可以假設倒數第k個節點總是存在。

2. 方法與思路

  很容易想到第一種方法,就是先對單鏈表進行進行一次遍歷,求出其長度n。然後再進行第二次遍歷,設一個指標,向後移動nk個位置,然後刪除這個節點。
  第二種方法就是使用雙指標,只需要對連結串列進行一遍訪問即可。

  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移