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

  1. 输入:head = [4,5,1,9],val = 5
  2. 输出:[4,1,9]
  3. 输入: head = [4,5,1,9],val = 1
  4. 输出: [4,5,9]

说明:

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

    解题思路

    此题要找到要被删除的节点很容易,无非是遍历链表进行值的比较,但是问题是我们要记录前一个节点delete.jpg
    所以标记 pre 才是此题的关键所在。
    此题我采用的是 双指针 方法,两个指针同步偏移。 ```c /**
    • Definition for singly-linked list.
    • struct ListNode {
    • int val;
    • struct ListNode *next;
    • }; */

struct ListNode deleteNode(struct ListNode head, int val){ struct ListNode slow = head; struct ListNode fast = head->next; if (slow->val == val) { return fast; } while (fast) { if (fast->val == val) { slow->next = fast->next; return head; } slow = slow->next; fast = fast->next; } return NULL; } ```