您的位置:首页 > 编程语言 > C语言/C++

链表指定值清除(C++)

2015-12-09 22:41 337 查看
题目:

有一个单链表。链表中每个节点保存一个整数,给定一个值val,把所有等于val的节点删掉。

给定一个单链表的头结点head,同时给定一个值val,返回清除后的链表的头结点,保证链表中有不等于该值的其它值。

同时保证其他元素的相对顺序。

如:

输入:{1,2,3,4,3,2,1},2

输出:{1,3,4,3,1}

思路:

这道题的思路比较简单,遍历一次链表即可。

每次判断当前结点的下一个结点的val是否等于给定的val

如果相等 删除下一个结点并将链表重新连接 即可。

如果不等 遍历下一个结点。

贴代码:

#include <iostream>

using namespace std;

struct ListNode
{
int val;
struct ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};

ListNode* clearSpecificValue(ListNode* head, int val)
{
if (head == NULL)
{
return head;
}

// 头结点的前一个结点
ListNode preNode(-1);
preNode.next = head;

ListNode *curNode = &preNode;

while(curNode->next != NULL)
{
if (curNode->next->val == val)
{
ListNode *nextNode = curNode->next;
curNode->next = nextNode->next;
delete nextNode;	// 内存泄露
}
else
{
curNode = curNode->next;
}
}

return preNode.next;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: