链表操作在面试中经常出现,这一方面考察了对指针的使用,以下整理了一些关于链表的面试题以及注意事项。
首先对单链表进行定义。
struct ListNode{
int val;
ListNode *next;
};
关于链表,有以下几个方面需要注意:
1、指针方面。判断指针是否为NULL,何时判断等等。
2、不要贪图少指针,尽量清楚明了逻辑清晰,多几个指针也没关系。
3、一般单链表的题目较多,一定要注意单链表的单向特性,该保存指针就保存,同2,不要妄想就用一个指针解决问题。
4、指针作为实参传入时要注意,虽然指针可以改变所指向的地址的值,但是指针所保存的地址依然是作为按值传递进入函数的,所以若想使用最后的指针,需要使用指针的指针、引用或者利用函数返回指针,切记这三种方式。
接下来对几个常见问题进行介绍。
问题1:输入一个单向链表,输出该链表中倒数第k个结点
先第一个指针向前走k,然后第二个指针此时和第一个指针一起走即可。
情况:pHead=NULL、链表小于k、k输入为0;
ListNode* LastK(ListNode* pHead, unsigned int k)
{
// 保证输入的正确性;
if (pHead == NULL || k == 0)
return NULL;
ListNode *pAhead = pHead;
ListNode *pBehind = NULL;
for ( int i = 0; i < k - 1; i++)
{
if (pAhead->next != NULL)
pAhead = pAhead->next;
else
return NULL;
}
pBehind = pHead;
while ( pAhead != NULL)
{
pAhead

本文主要探讨链表在面试中的重要性,提供了一些常见的链表问题,包括找到链表倒数第k个节点、判断链表是否有环以及如何找到环的入口。此外,还讨论了判断两个链表是否相交以及在O(1)时间删除链表节点的挑战。重点在于理解和处理链表操作时的指针管理及特殊情况。
最低0.47元/天 解锁文章
&spm=1001.2101.3001.5002&articleId=19485569&d=1&t=3&u=dccda33f6bc74559bcaaaf01c3b04519)
7690

被折叠的 条评论
为什么被折叠?



