layout: post post
title: 14.鏈表中倒數第k個結點
date: 2019-11-02 20:15:40
categories: 劍指offer
mathjax: true
tags:
題目描述
輸入一個鏈表,輸出該鏈表中倒數第k個結點。
思路
- 先統計鏈表節點的個數n,再從頭遍歷到第n-k+1個節點
- 爲了實現只遍歷一次,可以定義兩個指針,第一個指針從鏈表的頭指針開始遍歷向前走k-1步,第二個指針保持不動,從第k步開始,第二個指針也開始從鏈表的頭指針開始遍歷
代碼
思維全面,注意代碼的魯棒性 。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
ListNode* Ahead=pListHead;
ListNode* Behind=pListHead;
if(pListHead==NULL || k==0)
return NULL;
for(unsigned int i=0;i<k-1;i++)
{
if(Ahead->next!=NULL)
Ahead=Ahead->next;
else
return NULL;
}
while(Ahead->next!=NULL)
{
Ahead=Ahead->next;
Behind=Behind->next;
}
return Behind;
}
};
擴展
題目:求鏈表的中間節點,如果節點的總數爲奇數,則返回中間節點,若節點的總數爲偶數,返回中間兩個節點的任意一個。
思路:定義兩個指針,一個指針一次走一步,一個指針一次走兩部