(Leetcode-链表-1) 删除节点

发布时间:2019-06-18 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了(Leetcode-链表-1) 删除节点脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

1.删除链表的结点

编写一个函数,在给定单链表一个结点(非尾结点)的情况下,删除该结点。假设该链表为1 -> 2 -> 3 -> 4 并且给定你链表中第三个值为3的节点,在调用你的函数后,该链表应变为1 -> 2 -> 4。

分析:
1.待删除的节点不是尾节点
2.可以不借助待删除节点的父节点,可以直接操作待删除的节点

 void deleteNode(ListNode* node) {
      ListNode* next=node->next;
      node->val=next->val;
      node->next=next->next;
      free(next);
}

2.删除链表的倒数第N个节点

给定一个链表,删除链表的倒数第 n 个节点并返回头结点。给的 n 始终是有效的。尝试一次遍历实现。
给定一个链表: 1->2->3->4->5, 并且 n = 2.

当删除了倒数第二个节点后链表变成了 1->2->3->5.

分析:
1.n永远有效可以不考虑
2.待删除节点可以是尾巴节点,则需要借助父节点,因为待删除的节点不可以直接为NULL
3.当被删节点为头节点时,需要借助第三方节点(头结点的父节点)

 ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode* node=(ListNode*)malloc(sizeof(ListNode));
        node->next=head;
        ListNode* front=node;
        while(--n)head=head->next;
        while(head->next!=NULL){
            front=front->next;
            head=head->next;
        }
        ListNode* tmp=front->next;
        front->next=tmp->next;
        free(tmp);
        return node->next;
}

脚本宝典总结

以上是脚本宝典为你收集整理的(Leetcode-链表-1) 删除节点全部内容,希望文章能够帮你解决(Leetcode-链表-1) 删除节点所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: