题目大意:给出一个链表中的节点,在链表中删除该节点,如果是尾节点则不删除。如:链表 1 -> 2 -> 3 -> 4 要删除链表中值为3的节点,则操作后的链表为
1 -> 2 -> 4。
算法思想:
1.设置一个前驱节点和一个后继节点。
2.判断后继节点是否为空,若为空则是尾节点直接返回。否则遍历链表。
3.从要删除节点开始,一次将后继节点中的值向前移动,直到遍历完链表为止。
4.删除链表末尾的节点。
代码如下:
/**
* 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) {
if(node->next==NULL)
return;
else{
ListNode* pNext=node->next;
ListNode* pre=node;
while(pNext!=NULL){
node->val=pNext->val;
pre=node;//记录前驱指针
node=pNext;
pNext=pNext->next;
cout<<"current:"<< node->val<<endl;
}
pre->next=NULL;
delete node;
}
}
};