https://www.cnblogs.com/edisonchou/p/4765163.html
https://blog.csdn.net/derrantcm/article/details/45529213
typedef struct node
{
int m_nValue;
struct node* m_pNext;
}ListNode;
void delNode(ListNode* pHead, ListNode* pDel) {
if (pHead == NULL || pDel == NULL) {
return;
}
if (pDel->m_pNext!=NULL) {
//被删除的不是最后一个
ListNode *temp = pDel->m_pNext;
pDel->m_nValue = temp->m_nValue;
pDel->m_pNext = temp->m_pNext;
}
else if (pHead == pDel) {
//是最后一个且头尾相等,那么列表就一个元素
pHead = NULL;
}
else {
// 删除的是最后一个,且链表多于两个元素
ListNode *cur = pHead->m_pNext;
ListNode *pre = pHead;
while (cur != pDel) {
pre = cur;
cur = cur->m_pNext;
}
pre->m_pNext = NULL;
}
}
pHead = (ListNode*)malloc(sizeof(ListNode));
pNode1 = (ListNode*)malloc(sizeof(ListNode));
pNode2 = (ListNode*)malloc(sizeof(ListNode));
pNode3 = (ListNode*)malloc(sizeof(ListNode));
pHead->m_nValue = 0;
pHead->m_pNext = pNode1;
pNode1->m_nValue = 1;
pNode1->m_pNext = pNode2;
pNode2->m_nValue = 2;
pNode2->m_pNext = pNode3;
pNode3->m_nValue = 3;
pNode3->m_pNext = NULL;
delNode(pHead,pHead);