1. 程式人生 > >【面試題】 求連結串列倒數第K個節點

【面試題】 求連結串列倒數第K個節點

題目:輸入一個連結串列輸出連結串列中的第K個節點,(計數從1開始),連結串列節點定義如下:

//定義結構
struct ListNode
{
	ListNode()
		:_next(NULL)
		,_data(0)
		{}
	ListNode *_next;
	int _data;
};

實現思路:

    我們可以定義兩個指標,第一個指標從連結串列的頭指標開始向前走K個節點,第二個指標開始保持不動,第一個走完K個後,第二個指標從連結串列頭部開始,當第一個指標到達最後的NULL時,第二個指標剛好是倒數第K個結點。

實現程式碼:

ListNode *FindKthTail(ListNode *pHead, size_t K)
{
	if (NULL == pHead || K == 0)
		return NULL;
	ListNode *fast = pHead;
	ListNode *slow = pHead;
	for (size_t i = 0; i < K; i++)
	{
		if (fast)//防止k大於連結串列節點的個數
			fast = fast->_next;
		else
			return NULL;
	}
	while (fast)
	{
		fast = fast->_next;
		slow = slow->_next;
	}
	return slow;
}

相關推薦

試題 連結串列倒數K節點

題目:輸入一個連結串列輸出連結串列中的第K個節點,(計數從1開始),連結串列節點定義如下: //定義結構 struct ListNode { ListNode() :_next(NULL) ,_data(0) {} ListNode *_next; int

試題連結串列的環入口點

環入口點:我們設A是連結串列的起點,B是環的入口點,C是環內快慢指標的相遇點。兩個快慢指標定義為slow和fast. slow走的路程:A->B->C; fast走的路程:A->B->C->B->C; 2*(x+y)=x+y+z+y 

連結串列倒數 k 節點

#include <iostream> struct ListNode { int m_nValue; ListNode* m_pNext; }; /* 查詢連結串列倒數第 k 個結點 */ ListNode* FindKthToTail(ListNode* pHea

查詢連結串列倒數k節點

演算法描述: 給出一個單向連結串列的頭指標(根指標),輸出該連結串列中倒數第k個節點的指標。連結串列的倒數第0個節點的尾節點(尾節點的next成員為NULL)。函式find_node實現上述功能,連結串列節點定義及函式宣告如下,請實現函式find_node。 typedef

連結串列(5)----查詢連結串列倒數K節點

1、連結串列定義 typedef struct ListElement_t_ { void *data; struct ListElement_t_ *next; } ListElement_t; typedef struct List_t_{

leetcode: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. For example, Given linked list: 1->2->

劍指offer——(6)從尾到頭列印連結串列&&反轉連結串列&&連結串列倒數K結點

/** * public class ListNode { * int val; * ListNode next = null; * * ListNode(int val) { * this.val = val; *

lintcode 連結串列倒數n節點

lintcode 連結串列倒數第n個節點 每日一練 加油 描述 找到單鏈表倒數第n個節點,保證連結串列中節點的最少數量為n。 樣例 給出連結串列 3->2->1->5->null和n = 2,返回倒數第二個節點的值1. 思路 第一個反應,先

輸出連結串列倒數k結點

 問題描述: 輸入一個連結串列,輸出該連結串列中倒數第k個結點。 解題思想: 若連結串列為空或者k為0,則返回的是None。 當連結串列不為空時,有兩種情況: 連結串列長度n<k時,不存在倒數第k個結點,則返回None。 連結串列長度n>k時,設定一個長

常見連結串列操作-刪除連結串列倒數n節點(JAVA實現)

問題 給出一個單向連結串列,刪除該連結串列倒數第n個節點,並返回頭節點。 例如: 給出連結串列 1->2->3->4->5,n=2 返回連結串列 1->2->3->5 解題思路 最容易想到的演算法: 先遍歷一次連結串列,

LeetCode19 刪除連結串列倒數N節點

Given a linked list, remove the n-th node from the end of list and return its head. Example: Given linked list: 1->2->3->4->5, and

移除連結串列倒數N節點

給定一個連結串列,刪除連結串列的倒數第 n 個節點,並且返回連結串列的頭結點。 示例: 給定一個連結串列: 1->2->3->4->5, 和 n = 2. 當刪除了倒數第二個節點後,連結串列變為 1->2->3->5. 思路:

19 刪除連結串列倒數N節點

2.刪除連結串列倒數第N個節點 普通方法 ListNode *removeNthFromEnd(ListNode *head, int n) { if(head->next==nullptr) return nullptr; ListNode *first =

[LeetCode] 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. For example, Given linked list: 1->2->3->4->5, and n

Lintcode 166.連結串列倒數n節點

1.問題描述:找到單鏈表倒數第n個節點,保證連結串列中節點的最少數量為n 2.解題思路:建立兩個指向head的指標p q,讓p遍歷,p先開始移動,p走到第n-1個節點是,之後p q 一起往後移動,這時候當p指向最後一個節點的時候,q就指向了倒數第n個節點的位置,這時候返回q

每天一道LeetCode-----刪除連結串列倒數n節點

原題連結Remove Nth Node From End of List 意思是給定一個連結串列,要求刪除倒數第n個節點,返回連結串列頭,複雜度在O(n) 思路就是找到倒數第n個和倒數第n+

leetcode 刪除連結串列倒數n節點(一次掃描)

題目描述 給定一個連結串列,刪除連結串列的倒數第 n 個節點,並且返回連結串列的頭結點。 演算法思想 採用一次掃描的辦法,需要定位到刪除節點的前面的節點 因此指標p往後挪動的個數為n+1次 注意如果p挪動之後,碰到空,說明刪除的是頭結點 使用兩個指標,一個從頭還是挪動,一

連結串列-連結串列倒數n節點-簡單

描述找到單鏈表倒數第n個節點,保證連結串列中節點的最少數量為n。您在真實的面試中是否遇到過這個題?  是樣例給出連結串列 3->2->1->5->null和n = 2,返回倒數第

python---連結串列倒數n節點

""" Definition of ListNode class ListNode(object): def __init__(self, val, next=None): self.val = val self.nex

劍指Offer學習試題15 :連結串列倒數k結點

題目:輸入一個連結串列,輸出該連結串列中倒數第k 個結點.為了符合大多數人的習慣,本題從1 開始計數,即連結串列的尾結點是倒數第1 個結點.例如一個連結串列有6 個結點,從頭結點開始它們的值依次是1 、2、3、4、5 、6。這個個連結串列的倒數第3 個結點是值為