其他分享
首页 > 其他分享> > 笔试中相关单链表考题

笔试中相关单链表考题

作者:互联网

  1. 反转单链表

    就是将单链表反转一下:

    image.png

image.png

第一种解法:三指针。

分别是newp:被指向的指针;cur:反转指向的指针;p:下一个指针;

image.png

由图可以看出这是一次反转指针的具体操作,之后是相同的步骤以此类推,直到cur的指针为空的情况,如果链表为空或者只有一个结点,则直接返回,不进行任何操作;

第二种解法:

新建一个空链表,将原链表的结点利用头插法的思想依次头插到新链表中,最终将链表反转;

直接上图:image.png

和上面一样也是三个指针,但代表的含义不一样,newhead:是新链表的指针,cur:即将头插的指针,p:下一个指针;按照上述步骤以此类推,完成了反转,这两种解法的核心代码是一样的,但其代表的含义不一样!

image.png

2.求链表的中间结点:

给定一个头结点为 head 的非空单链表,返回链表的中间结点。

如果有两个中间结点,则返回第二个中间结点。

第一种方法:直接统计链表的个数;利用循环将指针移动到二分之一处,循环结束后指针的指向即为链表的中间结点。

这里代码比较简单我就不写了(感兴趣的可以自行实现)。

第二种方法:

使用快慢指针:思想:fast:每次走两步,slow:每次走一步,当fast走完整个链表时,slow正好走到中间;直接上图:

image.png

代码如下所示:

image.png

3.获取单链表中倒数第k个节点。

第一种解法:将链表逆置,获取正数第k个结点,在将链表逆置(有兴趣的同学可以自行实现);

第二种解法:拿出两个指针,fast:先走k步,n为结点总个数;slow指向头指针;之后再一起走。下图所示:

image.png

代码如下:

image.png

4.链表的回文结构

如图:1->2->2->1

1:找到中间结点;2:断开,后半段逆置;3;依次对比链表中的结点是否相等。

代码如下:image.png

5.相交链表:编写一个程序,找到两个单链表相交的起始节点。

首先判断两个链表是否相交,相交的情况:

image.png

如果相交求相交起始节点:

1,获取两个链表节点的个数;2,求其个数差值,然后让长链表走差值步数;3,两个链表一起走,直至遇到第一个相交结点。

标签:结点,单链,笔试,相交,链表,考题,解法,指针
来源: https://blog.51cto.com/u_15152976/2778123