【Java】實現一個演算法,找出一個單鏈表中倒數第K個結點
用迭代法,使用兩個指標P1和P2,分別指向連結串列中相聚K個結點的兩個結點。
P1,p2均指向頭加點,然後將P2向前移動K個結點。之後,以相同的速度移動這兩個指標,那麼p2會在length-K步後到達尾結點,這時p1就剛好在第length-K個結點也就是倒數第K個結點的位置上。
LinkListNode nthToLast(LinkListNode head, int k) { if( k<0 ) return null; LinkListNode p1 = head; LinkListNode p2 = head; //先將P2向前移動k個結點 for(i = 0; i < k; i++) { if (NULL == p2) return NULL; else p2 = p2->next; } if (NULL == P2) return NULL; //接著以同樣的速度移動p1和p2,當p2抵達連結串列末尾時,p1指向第K個結點 while(p2->next != NULL) { p1 = p1->next; p2 = p2->next; } return p1; }
相關推薦
【Java】實現一個演算法,找出一個單鏈表中倒數第K個結點
用迭代法,使用兩個指標P1和P2,分別指向連結串列中相聚K個結點的兩個結點。 P1,p2均指向頭加點,然後將P2向前移動K個結點。之後,以相同的速度移動這兩個指標,那麼p2會在length-K步後到達尾結點,這時p1就剛好在第length-K個結點也就是倒數第K個結點的位置
輸出單鏈表中倒數第k個結點(Java版)
題目:輸入帶頭結點的單鏈表L,輸出該單鏈表中倒數第k個結點。單鏈表的倒數第0個結點為該單鏈表的尾指標。要求只能遍歷一次單鏈表。 解題思路: 如果不要求只能遍歷一次單鏈表,我們可以先遍歷一次單鏈表
【LeetCode & 劍指offer刷題】鏈表題4:22 刪除鏈表中倒數第k個結點(19. Remove Nth Node From End of List)
star urn n+1 valid ffffff 防禦性編程 normal move rgb 【LeetCode & 劍指offer 刷題筆記】目錄(持續更新中...) 19. Remove Nth Node From End of List Given a l
【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】14、鏈表中倒數第k個結點
find null java 計數 slow http 解法 public 輸出 ??題目描述: ??輸入一個鏈表,輸出該鏈表中倒數第k個結點。為了符合習慣,從1開始計數,即鏈表的尾結點是倒數第1個節點。例如,一個鏈表有6個結點,從頭結點開始,它們的值依次是1,2,3,4,
劍指Offer面試題15(Java版):鏈表中倒數第K個結點
head 計數器 easy sta 相同 ret white style 輸出 題目: 輸入一個鏈表。輸出該鏈表中倒數第k哥結點。 為了符合大多數人的習慣,本題從1開始計數。即鏈表的尾結點是倒數第1個結點。 比如一個鏈表有6個結點。從頭結點開始它們的值依次是1。2。
查詢單鏈表的倒數第k個結點,要求只能遍歷一次連結串列
pNode FindLastKNode(pList plist, int k) { pNode pFast = plist; pNode pSlow = plist; if (plist == NULL || k <= 0) { return NULL;
連結串列---找出單鏈表中倒數第k個節點
思路: 1、迭代,二指標,快的先走n步,然後一起走,當fast走到最後,slow就是結果 2、遞迴,到達連結串列末尾返回一個0計數器,當計數器等於k時就是第k個 迭代 ListNode nthToLast(ListNode head, int n) {
找出鏈表中倒數第K個結點
span 節點 i++ code ext else head count fas 思路:兩個指針,也是快指針和慢指針,先讓快指針走k -1步,這時慢指針開始和快指針一起走到尾部。慢指針停止的點就是倒數第k個節點。 public static ListNode find
劍指offer66題--Java實現,c++實現和python實現 14.連結串列中倒數第k個結點
題目描述 輸入一個連結串列,輸出該連結串列中倒數第k個結點。 C++實現 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/
java 輸入一個連結串列,輸出該連結串列中倒數第k個結點。
輸入一個連結串列,輸出該連結串列中倒數第k個結點。 解題思路: 1、當輸入的連結串列為空的時候直接返回空 2、當輸入的k值大於連結串列的節點數的時候直接返回null; 3、先遍歷連結串列得出連結串列的
用js實現輸入一個連結串列,輸出該連結串列中倒數第k個結點。
function a(head,k) { let array = []; if (head === null) { return false; } let node = head; while(node != null) { array.pu
java實現---查詢單鏈表的倒數第K個節點,要求只能遍歷一次連結串列;;;刪除連結串列的倒數第k個節點
java實現 查詢單鏈表的倒數第K個節點,要求只能遍歷一次連結串列 刪除連結串列的倒數第k個節點 查詢單鏈表的倒數第K個節點,要求只能遍歷一次連結串列 定義兩個前後節點forward和backward 先
【劍指Offer】12連結串列中倒數第k個結點
題目描述 輸入一個連結串列,輸出該連結串列中倒數第k個結點。 時間限制:1秒;空間限制:32768K;本題知識點: 連結串列 解題思路 注意返回的是Node,而不是Node的Value。注意處理k超出範圍的異常情況。 # -*- coding:utf-8 -*- # class
【劍指offer{11-14}】二進位制中1的個數、數值的整數次方、調整陣列順序使奇數位於偶數前面、連結串列中倒數第k個結點
二進位制中1的個數、數值的整數次方、調整陣列順序使奇數位於偶數前面、連結串列中倒數第k個結點 二進位制中1的個數 題目描述 輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示。 C+
輸入一個連結串列,輸出該連結串列中倒數第k個結點。
兩種思路: 1)用棧的思想,先把連結串列反轉,然後再找出第k個節點。 先把所有節點放進棧內,同時統計節點個數,若總節點數小於k則返回null。在彈出棧,倒數k即為彈出的第k個值。 2)定義兩個指標,一個指標先走k步,再兩者一起往後走,當第一個指標到達終點的時候,第二個指
【資料結構】連結串列相關練習題:連結串列中倒數第k個結點
題目描述:輸入一個連結串列,輸出該連結串列中倒數第k個結點。 分析:這個題同樣是引入快慢指標,為了遍歷一次就找到倒數第k個節點,可以定義兩個指標:fast指標從連結串列的頭指標開始遍歷向前走k-1(k)步,slow指標保持不動;從第k步開始,slow指標開從連結串列的頭指標
劍指offer14-輸入一個連結串列,輸出該連結串列中倒數第k個結點
package JZoffertest; import JZoffertest.test3.ListNode; public class test14a { public ListNode Fin
【劍指offer】連結串列中倒數第k個結點
連結串列中倒數第k個結點 題目描述 輸入一個連結串列,輸出該連結串列中倒數第k個結點。 解題思路 設定兩個指標,讓其中一個指標比另一個指標先前移k-1步,然後兩個指標同時往前移動。迴圈直到先行的指標的值為NULL時,另一個指標所指的位置就是所要找的位置。 /* pub
13、輸入一個單向連結串列,輸出該連結串列中倒數第k個結點
#include <stdio.h> #include <stdlib.h> typedef struct node { int value; struct node *next; }LinkList; void CreateList(LinkList *L); //建立一個連