刪除單鏈表的倒數第K個節點
/**
* Created by lxw, [email protected] on 2017/10/27.
* 刪除單鏈表中倒數第K個結點
*/
public class TheLastKthNode {
public class Node{
public int value;
public Node next;
public Node(int data){
this.value = data;
}
}
public Node removeLastKthNode(Node head, int lastKth){
if(head == null || lastKth < 1)
return head;
Node cur = head;
while (cur != null){
lastKth--;
cur = cur.next
}
if(lastKth ==0){
head = head.next;
}
if(lastKth < 0){
cur = head;
while (++lastKth != 0){
cur = cur.next;
}
cur.next = cur.next.next;
}
return head;
}
}
ps: 假設N=9, K=6,目的是刪除倒數第6 個元素,也就是正數第4個元素,需要找到目標元素的前一個元素。讓連結串列從頭開始走,每移動一步,K減1,如第三行所示,最後一個元素為-3(K-N),然後進行第二次遍歷,K的值依次加1,當為0時停止遍歷,此時所對應的結點即為要刪除元素的前一個結點
正數 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
倒數 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
5 | 4 | 3 | 2 | 1 | 0 | -1 | -2 | -3 | |
-2 | -1 | 0 |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
另外一種方法是使用雙指標,front, back,front先走K個結點, 然後back與之同步走, 當front.next == null時, back所對應的結點就是要刪除結點的前一個結點
相關推薦
鏈表倒數第k個節點
stream malloc end alloc sizeof size clu AC list 題目:輸入一個鏈表,輸出該鏈表中倒數第k個結點 思路:1.遍歷兩遍鏈表,第一遍找到鏈表長度n,第二遍從0到n-k+1找到倒數第k個節點,不是最優解。 2.使用兩個指針,只需
返回單鏈表中第k個節點(leet簡單篇八百七十六題)
給定一個帶有頭結點 head 的非空單鏈表,返回連結串列的中間結點。 如果有兩個中間結點,則返回第二個中間結點。 示例 1: 輸入:[1,2,3,4,5] 輸出:此列表中的結點 3 (序列化形式:[3,4,5]) 返回的結點值為 3 。 (測評系統對該結點序列化表述
LeetCode 19. Remove Nth Node From End of List(刪除單鏈表倒數第N個結點)
題目描述: Given a linked list, remove the nth node from the end of list and return its head.例子: Give
取單鏈表倒數第k個元素
1.演算法要求 已知一個帶有表頭結點的單鏈表,結點結構為 typedef struct lnode { elemtype data; struct lnode *next; }lnode, *linklist;假設該連結串列只給出了頭指標l.在不改變連結串列的前提
查詢單鏈表倒數第k個元素
查詢單鏈表倒數第m個結點,要求時間複雜度為O(n).(提示,使用雙指標) 解題思路: 常規思路為先獲取連結串列的長度N,然後返回N-k+1位置處的結點即可。但是中需要遍歷兩次連結串列。 我們使用另一種演算法,設定兩個指標p1,p2.將這兩個指標
LintCode 找到單鏈表倒數第n個節點
給出連結串列 3->2->1->5->null和n = 2,返回倒數第二個節點的值1. 第一種方法:單鏈表只有頭指標,所以只能從頭部開始尋找,先遍歷一遍連結串列,確定連結串
輸出單鏈表倒數第K個結點值
倒數 else stdio.h cout size ++ iostream 鏈表 create #include<iostream>using namespace std;#include<malloc.h>#include<stdio.h&g
Java 找打單鏈表倒數第k個元素
單鏈表 auth sys int nod turn ++ util ear package List.www.cn; import java.util.ArrayList; /** * 在單鏈表中找打倒數第k個元素 * @author Administrator * *
刪除鏈表倒數第n個節點
val lin nod clas next pre def end list 題目: 給定一個鏈表,刪除鏈表的倒數第 n 個節點,並且返回鏈表的頭結點。 示例: 給定一個鏈表: 1->2->3->4->5, 和 n = 2. 當刪除了倒數
2.2 在單鏈表和雙鏈表中刪除倒數第K個節點
刪除 函數 del 另一個 核心 鏈表 刪除倒數第k個 單鏈表 dex 題目:分別實現兩個函數,一個可以刪除單鏈表中倒數第K個節點,另一個可以刪除雙鏈表中倒數第K個節點 要求:如果鏈表長度為N,時間復雜度達到O(N),額外空間復雜度達到O(1) My: 刪除單鏈表或雙鏈表中
在單鏈表和雙鏈表中刪除倒數第K個節點
題目 分別實現兩個函式,一個可以刪除單鏈表中倒數第K個節點,另一個可以刪除雙鏈表中倒數第K個節點。 要求 如果連結串列長度為n,則要時間複雜度達到O(N),額外空間複雜度達到O(1). 思路 一種方法是設定快慢指標,快指標先走k步,此時慢指標從頭開始走,兩者同時開始走,當
2.2在單鏈表和雙鏈表中刪除倒數第K個節點
題目 分別實現兩個函式,分別可以刪除單鏈表和雙鏈表中倒數第K個節點。 思路 兩次遍歷連結串列,第一遍每移動一步,就讓K值減1;第二遍從頭開始遍歷連結串列,每移動一步K值加1,加到0就停止遍歷,此時移動到的節點就是要刪除節點的前一個節點。 程式碼實現 c
java實現---查詢單鏈表的倒數第K個節點,要求只能遍歷一次連結串列;;;刪除連結串列的倒數第k個節點
java實現 查詢單鏈表的倒數第K個節點,要求只能遍歷一次連結串列 刪除連結串列的倒數第k個節點 查詢單鏈表的倒數第K個節點,要求只能遍歷一次連結串列 定義兩個前後節點forward和backward 先
在單鏈表中刪除倒數第k個節點(java實現)
實現方式很多,在這裡只說兩種實現方式。看不懂時候,大家可以畫畫圖,對理解為什麼很有幫助。 第一種方式: 1.首先判斷K值和連結串列是否為空,如果k<=0,或連結串列為空,直接返回head; 2.滿足上面條件後,定義ListNode P=head,重頭
刪除單鏈表的倒數第K個節點
/** * Created by lxw, [email protected] on 2017/10/27. * 刪除單鏈表中倒數第K個結點 */ public class TheLa
在單鏈表中刪除倒數第K個節點 Python 版
題目: 給定一個連結串列,刪除其中倒數第k個結點。 程式碼: class LinkedListAlgorithms(object): def __init__(self): pass def rm_last_kth_nod
連結串列問題——在單鏈表和雙鏈表中刪除倒數第K個節點
【題目】 分別實現兩個函式,一個可以刪除單鏈表中倒數第K個節點,另一個可以刪除雙鏈表中倒數第K個節點。 【要求】 如果連結串列長度為N,時間複雜度達到O(N),時間複雜度達到O(N),額外空間複雜度達到O(1) 【解答】 本題較為簡單,實現
鏈表問題----刪除倒數第K個節點
double created com 復雜度 lis 基本 dem pan ont 在單鏈表和雙鏈表中刪除倒數第K個節點 分別實現兩個函數,一個可以刪除單鏈表中的倒數第K個節點,一個可以刪除雙鏈表中的倒數第k 個節點,要求時間復雜度是 O(N),空間復雜度是 O(
查詢單鏈表的倒數第k個節點,要求只能遍歷一次連結串列
為了得到倒數第k個結點,很自然的想法是先走到連結串列的尾端,再從尾端回溯k步。可是輸入的是單向連結串列,只有從前往後的指標而沒有從後往前的指標。因此我們需要開啟我們的思路。既然不能從尾結點開始遍歷這個連結串列,我們還是把思路回到頭結點上來。假設整個連結串列有n個
一:單鏈表——③查詢倒數第k個節點(O(1))
製作人 :TheShyclear 製作時間:2018-7-21 製作內容:查詢單鏈表中的倒數第k個數據 版本號 :8.0 缺陷:頭節點只能插入一次,不能在1號節點出插入,詳細看Insert函式 注意:頭指標的不可改變性 思路:單鏈表中的許多問題需要用到兩個指