美文网首页
leetcode的题目237

leetcode的题目237

作者: 二木二三水 | 来源:发表于2018-05-23 22:03 被阅读0次

    237. 删除链表中的节点

    请编写一个函数,使其可以删除某个链表中给定的(非末尾的)节点,您将只被给予要求被删除的节点。

    比如:假设该链表为 1 -> 2 -> 3 -> 4  ,给定您的为该链表中值为 3 的第三个节点,那么在调用了您的函数之后,该链表则应变成 1 -> 2 -> 4 。

    /**

    * Definition for singly-linked list.

    * struct ListNode {

    *    int val;

    *    ListNode *next;

    *    ListNode(int x) : val(x), next(NULL) {}

    * };

    */

    class Solution {

    public:

        void deleteNode(ListNode* node) {

            node->val=node->next->val;

            ListNode* p=node->next;

            node->next=node->next->next;

            delete(p);

        }

    };

    主要思路:链表的节点中包含两项,一项是值,一项是指向下一个节点的指针。当前题目中,只给你一个节点,让你删除该节点,(删除节点的方法:1、找到当先节点的前一节点,使前一节点的指针直接指向当前节点的下一节点;2、将当前节点的下一节点的值复制到当前节点的值,将当前节点的下一节点的指针复制到当前节点的指针,例:node->val=node->next->val;  node->next=node->next->next;),根据题目所示,由于不能获取前一节点,所以使用第二种方法。由于下一节点已经全部复制到当前节点,所以下一节点已经无作用,进行删除可以释放内存。

    相关文章

      网友评论

          本文标题:leetcode的题目237

          本文链接:https://www.haomeiwen.com/subject/somdjftx.html