给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点,返回删除后链表的头节点。
输入:head = [4,5,1,9],val = 5输出:[4,1,9]输入: head = [4,5,1,9],val = 1输出: [4,5,9]
说明:
- 题目保证链表中节点的值互不相同
- 若使用C 或 C++ 语言,你不需要
free或delete被删除的节点解题思路
此题要找到要被删除的节点很容易,无非是遍历链表进行值的比较,但是问题是我们要记录前一个节点
所以标记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; } ```
