2023.5.21 删除链表节点

2022.5.12 删除链表节点

​ 来源:Leetcode;

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

说明:

  • 题目保证链表中节点的值互不相同
  • 若使用 C 或 C++ 语言,你不需要 free 或 delete 被删除的节点

解题思路:

  • 分析题目,删除链表中某一个特定的值。所以逻辑是 :找到该值所在的节点,然后删除这个节点

实现:

​ 第一步:找值。首先,如果是首节点为需要被删除,那么返回head->next即可(特殊情况)。其次,考虑在链表中,删除和插入操作是需要知晓:前中后三个节点,而由于链表是单向性。所以需要设置一个“慢一点”的指针,便于进行后续操作。写一个while循环,条件为head->next->val是否等于指定值。

​ 第二步:删除。找到值后,需要将前一个节点保存(pre),也要保存当前节点(cur)。pre->next=cur->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 *h=head;
            if(head->val ==val)
            {
                head=head->next;
                return head;
            }
            while(head->next->val !=val)
                {head=head->next;}
        ListNode *pre=head;ListNode *cur=head->next; 
        pre->next=cur->next;

        return h;     
    }
};
posted @ 2023-05-21 21:27  胡少辉  阅读(27)  评论(0)    收藏  举报