1. 題目描述
Remove all elements from a linked list of integers that have value val.
Example
Given: 1 –> 2 –> 6 –> 3 –> 4 –> 5 –> 6, val = 6
Return: 1 –> 2 –> 3 –> 4 –> 5
移除鏈表中等於給定值的元素。
2. 解題思路
首先移除頭指針節點爲給定值的元素,因爲這個移除的方式和中間節點不太相同。之後移除後邊重複的節點,使用兩個指針p、q,p指向前一個不是的值,當發現q與值相等時,p->next = q->next,不相等時p、q後移。
3. Code
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode removeElements(ListNode head, int val) {
// 首先去除所有處於頭部的val
while(head != null && head.val == val)
{
head = head.next;
}
if(head == null) return head;
ListNode p = head, q = p.next;
while(q != null)
{
if(q.val == val)
{
p.next = q.next;
}else{
p = p.next;
}
q = p.next;
}
return head;
}
}