Delete Node in a Linked List

原创 2016年06月01日 15:03:56
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) {}
 * };
 */
class Solution {
public:
    void deleteNode(ListNode* node) {
        //给出要删除的节点,可以将其后面的数值复制到前一个节点。这样就可以起到删除给定节点的目的
        ListNode *p=node;
        ListNode *pre=NULL;
        while(p->next)
        {
            p->val=p->next->val;
            pre=p;
            p=p->next;
        }
        pre->next=NULL;
        return;
    }
};
或者是将当前待删除元素的值修改为其next元素的值,然后修改下next的链接,将待删除节点的next指向其next的next即可。

/**
 * 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) {
        ListNode *tmp=node->next;
        node->val=tmp->val;
        node->next=tmp->next;
        delete tmp;
        return;
    }
};



版权声明:本文为博主原创文章,未经博主允许不得转载。

Delete Node in a Linked List(删除链表中的节点)

Write a function to delete a node (except the tail) in a singly linked list, given only access to th...
  • ajiangfan
  • ajiangfan
  • 2016年09月24日 11:40
  • 421

C++:实现LinkedList 学习抽象数据类型

C++:实现LinkedList 学习抽象数据类型标签(空格分隔): c++ 数据结构 作者:陈小默C实现LinkedList 学习抽象数据类型 定义需求 作为类 作为List 作为栈stack 作...
  • qq_32583189
  • qq_32583189
  • 2016年09月04日 17:36
  • 3328

C++实现单链表(Singly-Linked List)追加、遍历、删除

#include using namespace std; struct Node { int data; struct Node* next; }; class List { Node* ...
  • wupeak
  • wupeak
  • 2015年01月27日 00:13
  • 646

【LeetCode-面试算法经典-Java实现】【019-Remove Nth Node From End of List(移除单链表的倒数第N个节点)】

【019-Remove Nth Node From End of List(移除单链表的倒数第N个节点)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given a l...
  • DERRANTCM
  • DERRANTCM
  • 2015年07月22日 07:24
  • 2058

【LeetCode-面试算法经典-Java实现】【092-Reverse Linked List II(反转单链表II)】

【092-Reverse Linked List II(反转单链表II)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Reverse a linked list fro...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月06日 07:40
  • 1650

面试算法:Linked List-链 表

Linked List-链 表 很多面试相关的书籍都有链表和字符串操作相关的题,这类问题更考验编程基本功和对基础知识的掌握情况。由于之前很多题目做过就忘,再做时总是磕磕绊绊,说明没有真正消化...
  • bobbycho
  • bobbycho
  • 2016年10月23日 20:02
  • 80

c++实现list类(第一次用类) —— new对象需delete

一:起因 (1)拿出自己年初实现的list,第一次用c++类实现list或者说第一次写一个工程上用到的list类,在和如今实现的list对比,心情无比复杂; (2)说明了一点,我也曾经幼稚过,现在还...
  • u010700335
  • u010700335
  • 2014年11月22日 10:37
  • 2020

C实现 LeetCode->Reverse Linked List (双指针大法)(单链表反转)

Reverse a singly linked list. /**  *  Reverse a singly linked list    反转单链表,请牢记 Reverse()...
  • liutianshx2012
  • liutianshx2012
  • 2015年06月22日 15:04
  • 501

链表(LinkedList) C 语言实现

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。如图: 下面是代码实现: #include #include struct stud...
  • song_hui_xiang
  • song_hui_xiang
  • 2015年07月24日 15:29
  • 1589

linked-list-cycle-ii(有环链表的第一个公共节点)

题目描述: Given a linked list, return the node where the cycle begins. If there is no cycle, returnnul...
  • zh_ang_lei
  • zh_ang_lei
  • 2016年09月25日 23:39
  • 216
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Delete Node in a Linked List
举报原因:
原因补充:

(最多只允许输入30个字)