【数据结构 C语言版】第三篇 单链表习题_数据结构c语言 单链表题

本文介绍了链表操作中的多个关键问题,包括链表反转、找到中间节点、倒数第k个节点定位、合并有序链表、分割链表、判断环形结构以及寻找环的入口节点。通过快慢指针等方法,详细展示了代码实现和解决方案。
摘要由CSDN通过智能技术生成

image-20221004070315875

方法一代码

struct ListNode\* cur=head;
struct ListNode\* newhead=NULL;
while(cur)
{
    struct ListNode\* next=cur->next;
    cur->next=newhead;
    newhead=cur;
    cur=next;
}
return newhead;

题解(方法二)

(1)翻转方向

image-20221004071645679

(2)代码实现细节图解

image-20221004072211861

方法二代码

struct ListNode\* reverseList(struct ListNode\* head){
    struct ListNode\* n1,\*n2,\*n3;
    //防止链表为空n3赋值放在循环里面
    n1=NULL,n2=head,n3=NULL;
    while(n2)
    {
        n3=n2->next;
        n2->next=n1;
        
        //迭代
        n1=n2;
        n2=n3;
    }
    return n1;
}   

3.链表的中间结点

题目

链表的中间结点

image-20221004072755957

题解

(1)通过快慢指针,可以只遍历一遍链表就能得出正确答案

(2)快指针一次走两步,慢指针一次走一步,快指针走完链表,慢指针刚好在一半处。

(3)图解

image-20221006155101974

代码

struct ListNode\* middleNode(struct ListNode\* head){
    //快慢指针
    struct ListNode\* f=head,\*s=head;
    //注意两个判断条件
    while(f&&f->next)
    {
        s=s->next;
        f=f->next->next;
    }
    return s;
}

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

题目

[链表中倒数第k个结点_牛客题霸_牛客网 ](链表中倒数第k个结点_牛客题霸_牛客网 (nowcoder.com))

题解

(1)方法还是快慢指针

(2)fast先走一步,fast跟slow再同时走,最后slow停在的地方就是倒数第一个。

类推,fast先走k步,fast跟slow再同时走,最后slow停在的地方就是倒数第几个。

(3)图解:
image-20221006163055677

注意

(1)为什么fast先走的循环中使用k–,使用–k可以吗?

代码while(k–),k–的含义:每次先用k,然后再自减。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值