题目链接
https://leetcode.com/problems/delete-node-in-a-linked-list/
知识点:
考察链表、指针相关知识
思路:
这里只给出了node,没有给出val值,所以在一般情况下是不好删除node节点的.但是可以借助一个巧妙的方法,将node节点的下一个节点的值赋值给node节点,然后删除node节点的下一个节点即可.同样达到了删除node节点的目的.注意一些边界情况,比如node节点为空或者node节点为最后一个节点(node->next为空,直接删除即可).
AC代码:
class Solution
{
public:
void deleteNode(ListNode* node)
{
if(node == NULL)
return;
if(node->next == NULL)
{
delete node;
node = NULL;
return;
}
node->val = node->next->val;
ListNode* delNode = node->next;
node->next = delNode->next;
delete delNode;
}
};
AC代码加测试如下:
#include <bits/stdc++.h>
using namespace std;
struct ListNode
{
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* createLinkedList(int arr[], int n)
{
if(n == 0)
return NULL;
ListNode* head = new ListNode(arr[0]);
ListNode* curNode = head;
for(int i=1; i<n; i++)
{
curNode->next = new ListNode(arr[i]);
curNode = curNode->next;
}
return head;
}
void printLinkedList(ListNode* head)
{
ListNode* curNode = head;
while(curNode!=NULL)
{
cout<<curNode->val<<" -> ";
curNode = curNode->next;
}
cout<<"NULL"<<endl;
}
void deleteLinkedList(ListNode* head)
{
ListNode* curNode = head;
while(curNode!=NULL)
{
ListNode* delNode = curNode;
curNode = curNode->next;
delete delNode;
}
}
class Solution
{
public:
void deleteNode(ListNode* node)
{
if(node == NULL)
return;
if(node->next == NULL)
{
delete node;
node = NULL;
return;
}
node->val = node->next->val;
ListNode* delNode = node->next;
node->next = delNode->next;
delete delNode;
}
};
int main()
{
int arr[]= {1,2,3,4,5};
int n = sizeof(arr)/sizeof(int);
ListNode* head = createLinkedList(arr,n);
printLinkedList(head);
Solution().deleteNode(head->next->next);
printLinkedList(head);
deleteLinkedList(head);
return 0;
}