1. 问题描述
给定一个单链表,删除其中值为k的所有节点。例如:1→2→6→3→4→5→6,删除其中值为6的节点,返回:1→2→3→4→5。
2. 方法与思路
这是一个简单的链表操作题。删除是要考虑的节点所在的位置(头部,中间和尾部),分开处理一下好了。主要过程如下描述:
I. while head?>val≠target
head = head->next
II. 判断head是否为空
if head=NULL return NULL;
III. 遍历剩余链表,删除中间和尾部值为k的节点。
c++代码如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
ListNode* removeElements(ListNode* head, int val) {
if(head == NULL) return NULL;
while(head && head->val == val)
{
ListNode *pre = head;
head = head->next;
delete pre;
}
if(head == NULL) return head;
ListNode *p = head;
while(p && p->next)
{
ListNode *q = p->next;
if(q->val == val)
{
p->next = q->next;
delete q;
}
else
p = p->next;
}
return head;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-12 23:03:15