码迷,mamicode.com
首页 > 其他好文 > 详细

我也来刷LeetCode——2、Delete Node in a Linked List

时间:2015-08-30 14:23:09      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

  这道题的意思呢,是要你写一个函数删除一个节点但是尾节点除外在一个单链表内(英语渣,翻译得别扭...),仅仅给你那个要删除的节点。假如这个链表是 1 -> 2 -> 3 -> 4 ,你被给到的是第三个节点它的值为 3 , 这个链表应该变成这样 1 -> 2 -> 4 在调用了你的函数之后......

  它不能够删除尾节点,因此我们要判断尾节点的情况。要判断一个节点是否为尾节点,只需要判断 node -> next 是否为 空即可。在一般我们写链表的删除操作的时候,都会访问到要删除节点的上一个节点,然后将它的上一个节点的 next 指向要删除节点的下一个节点,再释放该节点。

  而在这里,我们无法访问要删除节点的上一个节点,所以不能通过最简单的改变指针的指向来进行删除操作。但是我们可以通过复制节点的方式,来达到最终的效果。我们将要删除节点的下一个节点的值复制到要删除的节点上,此时两个节点完全一样,我们再释放一个节点,这样就等同于删除了一个节点。所以针对这道题目来说答案就是这样,虽然改变指针指向是最简单的方式......

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 class Solution {
10 public:
11     void deleteNode(ListNode* node) {
12         if (node == nullptr) {
13             return;
14         }
15         if (node->next != nullptr){
16             ListNode* t = node->next;
17             node->val = node->next->val;
18             node->next = node->next->next;
19             delete t;
20         }
21     }
22 };

 

  

我也来刷LeetCode——2、Delete Node in a Linked List

标签:

原文地址:http://www.cnblogs.com/huangmingchuan/p/4770712.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!