LeetCode Problem -- 237. Delete Node in a Linked List

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_38088298/article/details/85295413
  • 描述:Write a function to delete a node (except the tail) in a singly linked list, given only access to that node.

Given linked list – head = [4,5,1,9], which looks like following:

4 -> 5 -> 1 -> 9

Example 1:

Input: head = [4,5,1,9], node = 5
Output: [4,1,9]
Explanation: You are given the second node with value 5, the linked list
should become 4 -> 1 -> 9 after calling your function.

Example 2:

Input: head = [4,5,1,9], node = 1
Output: [4,5,9]
Explanation: You are given the third node with value 1, the linked list
should become 4 -> 5 -> 9 after calling your function.

Note:

1. The linked list will have at least two elements.
2. All of the nodes’ values will be unique.
3. The given node will not be the tail and it will always be a valid node of the linked list.
4. Do not return anything from your function.

  • 分析:题目要求对单链表节点进行删除,并且直接给出要删除的节点,并没有给出头节点或删除节点前的节点,且链表没有向前的指针。但给出了链表的构造,考虑将要删除的节点值进行覆盖,最终删除链表最后一个元素的值。
  • 思路一:从需删除节点开始,用将元素依次进行覆盖。
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    void deleteNode(ListNode* node) {
        ListNode* p = node;
        while (p != NULL) {
            if (p -> next != NULL) {
                p -> val = p -> next -> val;
            }
            if (p -> next -> next == NULL) {
                p-> next = NULL;
            }
            p = p -> next;
        }
    }
};

猜你喜欢

转载自blog.csdn.net/m0_38088298/article/details/85295413