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;
}
}