剑指Offer:删除链表的节点

剑指Offer:删除链表的节点

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

解题思路:

  1. 单链表删除节点,直接将当前节点的指针指向下一个节点的next即可;
  2. 因为该题是查找节点中的值是否等于给定值,并且找到之后无法向前找节点;
  3. 在确认是否是要删除的节点前,将头指针先保存,在移动到下一个节点判断;
  4. 找到删除节点的话,直接将上一个头指针,下一个节点的next。

注意:
删除头节点,返回头节点的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) 
    {
        ListNode *ptr;
        ListNode *node;
        ptr=head;
        if(head->val==val)
        {
            ptr=head->next;      //若删除的是头指针
            return ptr;
        }
        while (head != NULL)
        {
            node=head;  
            head=head->next; 
            if(head->val==val)
            {
                node->next=head->next;
                return ptr;
            }
        }
        return NULL;
    }
};
posted @ 2020-03-01 20:50  Ternence_zq  阅读(79)  评论(0编辑  收藏  举报