Try   HackMD

【LeetCode】 237. Delete Node in a Linked List

Description

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:

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Note:

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

寫一個函式能刪除單向串列鏈結中的一個節點(不會是尾巴),只會給予該節點的存取權。

給予串列鏈結的頭 = [4,5,1,9],它看起來就像這樣:

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

注意:

  • 該串列鏈結至少擁有兩個元素。
  • 所有的節點都不重複。
  • 給予的節點不會是尾巴,且它總是串列鏈結中的合法節點。
  • 不要回傳任何東西。

Example:

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.

Solution

  • 基本的Linked-List練習題。
  • 刪除節點x時,通常我們會將x - 1next指向x + 1,並將節點x刪除。
    • Image Not Showing Possible Reasons
      • The image file may be corrupted
      • The server hosting the image is unavailable
      • The image path is incorrect
      • The image format is not supported
      Learn More →
    • 但因為這題只給予目標節點的存取權,拿不到所謂的x - 1,因為我們換一個做法。
  • 我們先將x的值設為x + 1的值,然後直接將xnext指向x + 2,最後將x + 1刪除。
    • Image Not Showing Possible Reasons
      • The image file may be corrupted
      • The server hosting the image is unavailable
      • The image path is incorrect
      • The image format is not supported
      Learn More →
    • 概念是完全一樣的,只是把整體往後移了一步。

Code

/** * 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) { node->val = node->next->val; auto temp = node->next; node->next = node->next->next; delete(temp); } };
tags: LeetCode C++