题目一:
输入一个链表, 输出该链表中倒数第 k 个结点.
时间限制:
1 秒
空间限制:
32768K
解题思路:
很容易想到的是求第 k 个结点, 其实倒数第 k 个结点稍微转换一下就出来了. 倒数第 k 个和正数第 k 个的相同点是前者距离尾部的长度和后者距离头部的长度是相同的.定义两个指针保持 k 这个长度一直向后移动, 知道 NULL 结点, 那么前面那个结点不就是倒数第 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* post = pListHead; ListNode* after = pListHead; int i = 0; for (; after != NULL; i++) { if (i >= k) { post = post->next; } after = after->next; } /*考虑k值如果比链表长度都大*/ return i < k ? NULL : post; } }
题目二:
输入一个链表, 反转链表后, 输出新链表的表头.
时间限制:
1 秒
空间限制:
32768K
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于