14.鏈表中倒數第k個結點


layout: post post
title: 14.鏈表中倒數第k個結點
date: 2019-11-02 20:15:40
categories: 劍指offer
mathjax: true
tags:


題目描述

輸入一個鏈表,輸出該鏈表中倒數第k個結點。

思路

  1. 先統計鏈表節點的個數n,再從頭遍歷到第n-k+1個節點
  2. 爲了實現只遍歷一次,可以定義兩個指針,第一個指針從鏈表的頭指針開始遍歷向前走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;
    
    }
};

擴展

題目:求鏈表的中間節點,如果節點的總數爲奇數,則返回中間節點,若節點的總數爲偶數,返回中間兩個節點的任意一個。

思路:定義兩個指針,一個指針一次走一步,一個指針一次走兩部

發佈了268 篇原創文章 · 獲贊 35 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章