1.问题描述:
给定一个单链表,删除链表中值为k的全部结点,返回头结点。
2.解题思路:
(1)检查链表头结点是否为空结点,是则返回。
(2)头结点存在,检查链表头结点的值是否为k,是则删除,同时检查是否该链表只有头结点。
(3)设置辅助结点p,与辅助结点的后继结点q,依次遍历整个链表。
3.代码实现:
ListNode* removeElements (ListNode* head, int k)
{
if(head == NULL) return NULL;
while(head && headdata == k)
{
ListNode *pre = head;
head = headnext;
free pre;
}
if (head == NULL) return head;
ListNode *p = head;
While(p && pnext)
{
ListNode *q = pnext;
if(qdata == k)
{
pnext = qnext;
free q;
}
else p = pnext;
}
return head;
}