![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode removeElements(ListNode head, int val) { while(head != null && head.val == val){ // ListNode delNode = head; // head = head.next; // delNode.next = null; head = head.next; } if (head == null){ return null; } ListNode prev = head; while(prev.next != null){ if(prev.next.val == val){ // ListNode delNode = prev.next; // prev.next = delNode.next; // delNode.next = null; prev.next = prev.next.next; } else{ prev = prev.next; } } return head; } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ // 使用虚拟头结点版本 // 虚拟头结点的作用:统一在链表中对头节点和其他节点相应的操作。 // 此时,head指向的链表中所有的节点都有前一个节点,就不需要对第一个节点进行特殊处理了。 class Solution { public ListNode removeElements(ListNode head, int val) { ListNode dummyHead = new ListNode(-1);// 任意给一个值,虚拟头结点不会被访问 dummyHead.next = head; ListNode prev = dummyHead; while(prev.next != null){ if(prev.next.val == val){ // ListNode delNode = prev.next; // prev.next = delNode.next; // delNode.next = null; prev.next = prev.next.next; } else{ prev = prev.next; } } return dummyHead.next; } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ // 使用递归版本 // 思想是把原问题转化为更小的问题 class Solution { public ListNode removeElements(ListNode head, int val) { if(head == null){ return null; } ListNode res = removeElements(head.next, val); if(head.val == val){ return res; } else{ head.next = res; return head; } } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ // 对Solution3的递归版本进一步简化。 class Solution { public ListNode removeElements(ListNode head, int val) { if(head == null){ return null; } head.next = removeElements(head.next, val); return head.val == val ? head.next : head; } }