zoukankan      html  css  js  c++  java
  • 面试题18:删除链表的节点(C++)

    题目地址:https://leetcode-cn.com/problems/shan-chu-lian-biao-de-jie-dian-lcof/

    题目描述

    给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。

    题目示例

    示例 1:

    输入: head = [4,5,1,9], val = 5
    输出: [4,1,9]
    解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.
    示例 2:

    输入: head = [4,5,1,9], val = 1
    输出: [4,5,9]
    解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9.

    解题思路

    思路1:利用双指针p、q遍历单链表删除相应的节点

    思路2:使用哑结点简化链表操作

    程序源码

    双指针

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* deleteNode(ListNode* head, int val) {
            if(head == nullptr) return nullptr;
            ListNode* p = head;
            ListNode* q = head->next;
            if(p->val == val) return q;
            while(q != nullptr)
            {
                if(q->val == val)
                {
                    p->next = q->next;
                    return head;
                }
                else
                {
                    q = q->next;
                    p = p->next;
                }
            }
            return head;
        }
    };

    哑结点

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* deleteNode(ListNode* head, int val) {
            if(head == nullptr) return nullptr;
            ListNode* dummy = new ListNode(-1);
            dummy->next = head;
            ListNode* p = dummy;
            while(p->next != nullptr)
            {
                if(p->next->val == val)
                    p->next = p->next->next;
                else
                    p = p->next;
            }
            return dummy->next;
        }
    };
    ----------------------------------- 心之所向,素履所往;生如逆旅,一苇以航。 ------------------------------------------
  • 相关阅读:
    lseek 与 ioctl
    perror表
    阻塞&&非阻塞
    linux read/write
    文件i/o函数 open/close
    linux 文件io
    linux下的静态库和共享库
    linux基本命令
    c++ 2.1 编译器何时创建默认构造函数
    Java学习笔记34(sql基础 :增删改查1)
  • 原文地址:https://www.cnblogs.com/wzw0625/p/12689627.html
Copyright © 2011-2022 走看看