237. Delete Node in a Linked List

来源:互联网 发布:双十一购物数据 编辑:程序博客网 时间:2024/06/05 17:26

博主只是个编程渣渣,还在学习当中,文章仅供参考,可能有很多错误,欢迎指正

Delete Node in a Linked List

原题链接:(https://leetcode.com/problems/delete-node-in-a-linked-list/#/description)

题目:Write a function to delete a node (except the tail) in a singly linked list, given only access to that node.
Supposed the linked list is 1 -> 2 -> 3 -> 4 and you are given the third node with value 3, the linked list should become 1 -> 2 -> 4 after calling your function

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */

  一开始见到这个题目,我的想法是遍历链表,找出node节点的上一个节点preNode,然后让preNode节点的next指针指向node节点的下一个节点,再删去node。
  代码如下

class Solution {public:    void deleteNode(ListNode* node) {        ListNode *preNode;//preNode为删除节点的前一点        while(preNode->next!=NULL && preNode->next==node)            preNode = preNode->next;        if(preNode->next==NULL)//链表里没有要删去的这一点            return;        else{            preNode->next = node->next;            delete node;            node = NULL;        }

  但是这个链表类并没有定义头节点,所以没有在申明preNode节点时使其为头节点。也就没有办法遍历整个链表,所以要换一个思路。
代码如下:

class Solution {public:    void deleteNode(ListNode* node) {        ListNode *next=node->next;        *node = *next;        delete next;    }};

*node =*next的意思是将next指向的内容都赋给node指向的。是将地址指向的内容赋给地址指向的内容。
对比一下
preNode = node->next是使preNode的指针 指向node的next指针指向的内容。是将地址赋给地址。

原创粉丝点击