1. 程式人生 > >劍指Offer-Python-連結串列中倒數第k個結點

劍指Offer-Python-連結串列中倒數第k個結點

題目:連結串列中倒數第k個結點

輸入一個連結串列,輸出該連結串列中倒數第k個結點。

思路1:一次遍歷該連結串列,將結點一次存入列表res中,最後返回res[-k]。這裡需要注意的是k的值是否符合題目要求,如果小於等於0或大於res長度則返回None。時間空間複雜度為O(n)。

程式碼:

# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def FindKthToTail
(self, head, k):
# write code here if head is None: return head h = head res = [] while h: res.append(h) h = h.next if k > len(res) or k <=0: return None return res[-k]

思路2:設定兩個指標指向頭結點。然後快指標往前移動k-1步(這是為了兩個指標之間相差k)。最後快慢指標同時前進,當快指標到達末尾時,慢指標正好指向倒數k結點上。
程式碼

        if head is None or k <= 0:
            return None
        p = q = head
        i = k - 1
        while i > 0 and p:
            p = p.next
            i -= 1
        if p is None:
            return None
        while p.next:
            p = p.next
            q = q.next
        return
q

相關推薦

Offer-Python-連結串列倒數k結點

題目:連結串列中倒數第k個結點 輸入一個連結串列,輸出該連結串列中倒數第k個結點。 思路1:一次遍歷該連結串列,將結點一次存入列表res中,最後返回res[-k]。這裡需要注意的是k的值是否符合題目要求,如果小於等於0或大於res長度則返回None。

[offer] --14.連結串列倒數k結點

題目描述 輸入一個連結串列,輸出該連結串列中倒數第k個結點。 /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = v

offer(14)連結串列倒數k結點

題目描述 輸入一個連結串列,輸出該連結串列中倒數第k個結點。 解題思路 輸出的是 倒數第k個連結串列,可以參考Leetcode刪除連結串列倒數節點的那個演算法題 一共有兩種解法,一是兩遍遍歷的,二是一遍遍歷的。 兩次遍歷的思路就是先遍歷一遍 求出連結串列長度,然後在遍歷,輸出N-k+1的節點

offer連結串列倒數K結點

連結串列中倒數第K個結點 輸入一個連結串列,輸出該連結串列中倒數第k個結點。 思路:使用兩個指標,先讓第一個指標和第二個指標都指向頭結點,然後再讓第一個指正走(k-1)步,到達第k個節點 然後兩個

offer 15. 連結串列倒數k結點

原題 輸入一個連結串列,輸出該連結串列中倒數第k個結點。 Reference Answer 解題思路: 對於這種python求解連結串列題,尤其是本題讓返回節點或者值,直接先遍歷玩連結串列轉換到 python 的list中,再進行操作,順風順水。 # -*- c

offer連結串列倒數k結點

連結串列中倒數第k個結點 題目描述 輸入一個連結串列,輸出該連結串列中倒數第k個結點。 解題思路 設定兩個指標,讓其中一個指標比另一個指標先前移k-1步,然後兩個指標同時往前移動。迴圈直到先行的指標的值為NULL時,另一個指標所指的位置就是所要找的位置。 /* pub

offer 21. 連結串列倒數k節點

輸入一個連結串列,輸出該連結串列中倒數第k個結點。 注意: k >= 0; 如果k大於連結串列長度,則返回 NULL; 樣例 輸入:連結串列:1->2->3->4->5 ,k=2 輸出:4 可以用兩個相同的指標

Offer14:連結串列倒數k結點

思路:  先判斷k是否小於1,若是則什麼都不返回。 反之,將head.val的值依次加入到列表l中,然後在判斷k是否大於l的長度,若是則什麼都不返回,反之返回l[-k]。 # -*- coding:utf-8 -*- # class ListNode: # def __

offer22:連結串列倒數k結點

題目描述 輸入一個連結串列,輸出該連結串列中倒數第k個結點。   class Solution: def FindKthToTail(self, head, k): # write code here if k<=0 or head

Offer】12連結串列倒數k結點

題目描述 輸入一個連結串列,輸出該連結串列中倒數第k個結點。 時間限制:1秒;空間限制:32768K;本題知識點: 連結串列 解題思路 注意返回的是Node,而不是Node的Value。注意處理k超出範圍的異常情況。 # -*- coding:utf-8 -*- # class

Offer - 14:連結串列倒數k結點

題目描述 輸入一個連結串列,輸出該連結串列中倒數第k個結點 題目連結:https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a public class Solution {

offer刷題之連結串列倒數k結點

題目描述 輸入一個連結串列,輸出該連結串列中倒數第k個結點。 # -*- coding:utf-8 -*- # class ListNode: #     def __init__(self, x): #         s

offer-14:連結串列倒數k結點

題目描述 輸入一個連結串列,輸出該連結串列中倒數第k個結點。 思路 兩個指標,先讓第一個指標和第二個指標都指向頭結點,然後再讓第一個指正走(k-1)步,到達第k個節點。然後兩個指標同時往後移動,當第一個結點到達末尾的時候,第二個結點所在位置就是倒數第k個節點處。 程式碼

offer刷題記錄14——連結串列倒數k結點

題目描述 輸入一個連結串列,輸出該連結串列中倒數第k個結點。 想到利用雙指標標記頭部,移動第二個指標直到距離為k - 1,再同時移動兩個指標,當第二個指標指向尾部,第一個指標則指向倒數第k個結點。 解法一: public class Solution {

offer--連結串列倒數k結點

題目描述 輸入一個連結串列,輸出該連結串列中倒數第k個結點。 解析 可以先便利一遍求出連結串列總長,再遍歷第二遍求出結點。 或者定義兩個指標,一個先遍歷到第k個結點,再兩個一起往後遍歷,前一個為

offer{11-14}】二進位制1的個數、數值的整數次方、調整陣列順序使奇數位於偶數前面、連結串列倒數k結點

二進位制中1的個數、數值的整數次方、調整陣列順序使奇數位於偶數前面、連結串列中倒數第k個結點 二進位制中1的個數 題目描述 輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示。 C+

14.連結串列倒數K結點-offer-Python2.7

題目描述 輸入一個連結串列,輸出該連結串列中倒數第k個結點。 思路1 要想找到倒數第k個結點,我們可以先求出連結串列的總長度,然後就可以找到倒數第k個結點在連結串列中的位置,之後再遍歷一遍連結串列,直

[offer]連結串列倒數k結點/反轉連結串列/合併兩排序的連結串列

題目描述 輸入一個連結串列,輸出該連結串列中倒數第k個結點。 解釋: 針對該道題目,主要有兩種解法:一種是將連結串列的節點壓入棧,由於棧有一個特點是先進後出,因此倒數第k個變成了順數第k個;第二種解法是求連結串列第k個節點,相當於順序遍歷連結串列第(n-k

offer66題--Java實現,c++實現和python實現 14.連結串列倒數k結點

題目描述 輸入一個連結串列,輸出該連結串列中倒數第k個結點。 C++實現 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/

【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