给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。
void Delete(ListNode** pListHead,ListNode* pToBeDeleted)
{
if(pListHead==NULL || pToBeDeleted==NULL)
return ;
if(*pListHead->next)
{
ListNode* node=pToBeDeleted->next;
pToBeDeleted->val=pToBeDeleted->next->val;
pToBeDeleted->next=node->next;
delete node;
node=NULL;
}
else if(*pListHead==pToBeDeleted)
{
delete pToBeDeleted;
pToBeDeleted=NULL;
*pListHead=NULL;
}
else{
ListNode* node=*pListHead;
while(node->next!=pToBeDeleted)
node=node->next;
node->next=NULL;
delete pToBeDeleted;
pToBeDeleted=NULL;
}
}
删除链表中重复的节点。在一个排序的链表中,如何删除重复的节点? 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
ListNode *first = new ListNode(-1);
first->next = pHead;
ListNode *p = pHead;
ListNode *last = first;
while (p != NULL && p->next != NULL) {
if (p->val == p->next->val) {
int val = p->val;
while (p!= NULL && p->val == val){
ListNode* node=p->next;
delete p;
p=NULL;
p=node;
}
last->next = p;
} else {
last = p;
p = p->next;
}
}
return first->next;
}
};