算法题打卡(011)-菜鸟进化-删除链表的倒数第n个节点

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。


输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]
示例 2:

输入:head = [1], n = 1
输出:[]
示例 3:

输入:head = [1,2], n = 1
输出:[1]
 

提示:

链表中结点的数目为 sz
1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

int getLength(struct ListNode* head) {
    int length = 0;
    while (head) {
        ++length;
        head = head->next;
    }
    return length;
    //这个求得是这个链表的长度。
}
struct ListNode* removeNthFromEnd(struct ListNode* head,int n){
        //dummy是用来保证头指针的,返回链表的头指针,就是返回整个链表
    struct ListNode* dummy = malloc(sizeof(struct ListNode));
    dummy->val=0,dummy->next=head;
    //获取原链表的长度,调用了上面的方法
    int length = getLength(head);
    //创建一个用来遍历链表的指针
    struct ListNode* cur = dummy;
    //查找倒数第n个结点
    for(int i=1;i<length-n+1;++i){
         cur=cur->next;
     }
     //将倒数第n个结点删除
    cur->next = cur->next->next;
    struct ListNode* ans = dummy->next;
    free(dummy);
    //return head;
    return ans;
}

我现在没有搞清楚的是

 struct ListNode* ans = dummy->next;
 free(dummy);
    //return head;

return ans;

 dummy->next本身就等于head,为什么不直接return head,还要让另一个指针等于dummy->next再return出来呢?

不客气地说,这个题确实难亿点。。通过做这个题,我最大的收获不是会了这道题,而是我搞清楚了struct ListNode。

struct ListNode {

        int val; //定义val变量值,存储节点值

        struct ListNode *next; //定义next指针,指向下一个节点,维持节点连接

  • 在节点ListNode定义中,定义为节点为结构变量。
  • 节点存储了两个变量:value 和 next。value 是这个节点的值,next 是指向下一节点的指针,当 next 为空指针时,这个节点是链表的最后一个节点。
  • 注意注意val只代表当前指针的值,比如p->val表示p指针的指向的值;而p->next表示链表下一个节点,也是一个指针。
  • 构造函数包含两个参数 _value 和 _next ,分别用来给节点赋值和指定下一节点

ok!今天的算法题结束!!! 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值