zoukankan      html  css  js  c++  java
  • 剑指 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;
        }
    };
  • 相关阅读:
    Truck History(poj 1789)
    Highways poj 2485
    117. Populating Next Right Pointers in Each Node II
    116. Populating Next Right Pointers in Each Node
    115. Distinct Subsequences
    114. Flatten Binary Tree to Linked List
    113. Path Sum II
    109. Convert Sorted List to Binary Search Tree
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
  • 原文地址:https://www.cnblogs.com/itdef/p/14253114.html
Copyright © 2011-2022 走看看