12.链表中倒数第k个结点

链表中倒数第k个结点
  • 参与人数:5703时间限制:1秒空间限制:32768K
  • 本题知识点:  链表
  •  算法知识视频讲解

题目描述

输入一个链表,输出该链表中倒数第k个结点。
设置两个指针p1和p2,p1不断向前走,当p1到链表头部的距离大于k时p2开始向前走,控制两个指针的距离为k。
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <stack>

using namespace::std;

struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
	val(x), next(NULL) {
	}
};

class Solution {
public:
	ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
		if (!pListHead || k < 0) return NULL;

		ListNode *p1 = pListHead;
		ListNode *p2 = pListHead;
		int count = 0;

		while (p1) {
			count++;
			if (count > k) {
				p2 = p2->next;
			}
			p1 = p1->next;
		}
		return count >= k ? p2 : NULL;
	}
};
int _tmain(int argc, _TCHAR* argv[])
{
	ListNode n1(1);
	ListNode n2(2);
	ListNode n3(3);
	ListNode n4(4);
	ListNode n5(5);

	n1.next = &n2;
	n2.next = &n3;
	n3.next = &n4;
	n4.next = &n5;

	Solution s;
	s.FindKthToTail(&n1, 1);
	return 0;
}


你可能感兴趣的:(12.链表中倒数第k个结点)