题目描述
输入一个链表,输出该链表中倒数第k个结点。
实现思想
定义两个指针,一个指针 p 用来指向开头,一个指针 next_k 指向距离开头节点的第k个节点。然后移动两个指针,如果后一个指针next_k指向了null(指向了链表的结尾),返回前一个指针p指向的节点即为该链表的倒数第k个节点。如果链表的节点数少于k,就返回null。
实现算法
/*
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 *p;
ListNode *next_k;
p = pListHead;
next_k = p;
for(int i = 0; i < k; i++) {
// 如果节点数少于k
if(next_k == NULL)
return NULL;
next_k = next_k -> next;
}
while(next_k) {
p = p -> next;
next_k = next_k -> next;
}
return p;
}
};
运行截图
总结
ListNode *p;
ListNode *next_k;
p = pListHead;
next_k = p;
注意结构体指针的定义直接用结构体名字加上一个* 再加一个指针名字即可;
结构体指针的赋值没有 * ;