• 剑指 Offer 18. 删除链表的节点 链表


    地址 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.
     
    
    说明:
    
    题目保证链表中节点的值互不相同
    若使用 C 或 C++ 语言,你不需要 free 或 delete 被删除的节点

    解答

    注意三种情况

    1 要删除的节点是头结点 那么直接返回头结点的下一个节点即可 

    return head->next;

    2 要删除的节点是尾节点 那么将要删除的节点的前节点的next置为NULL 即是删除.

    ListNode* prev->next = NULL;  //删除节点是尾部节点

    3 常规删除了 假设删除节点的前一个节点是pre 将prev的next指向删除节点的下一个节点即可

    ListNode*  p;
    ListNode* prev;
    prev->next = p->next;

     

    /**
     * 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->val == val) return head->next;
            
            ListNode* p = head;
            while(p != NULL){
                if(p->next->val == val){
                   p->next = p->next->next;
                    break;
                }else{
                    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->val == val) return head->next;
            ListNode* prev = head; ListNode* p = head->next;
            
            while(p!= NULL){
                if(p->val == val){
                    prev->next= p->next;
                    break;
                }else{  
                    prev=p;
                    p=p->next;
                }
            }
            
            return head;
        }
    };
  • 相关阅读:
    客户端性能优化
    session、cookie、token的区别
    java 动态代理模式(jdk和cglib)
    java 静态代理模式
    java ReentrantLock 公平锁 非公平锁 测试
    java ReentrantLock结合条件队列 实现生产者-消费者模式 以及ReentratLock和Synchronized对比
    VS2010 开发 VB6.0 activeX控件 dll
    C++CLI语法 在项目中的使用
    word 内容控件属性编辑
    VC调用静态库、动态库
  • 原文地址:https://www.cnblogs.com/itdef/p/14253114.html
Copyright © 2020-2023  润新知