237. Delete Node in a Linked List
Write a function to delete a node (except the tail) in a singly linked list, given only access to that node.
Supposed the linked list is 1 -> 2 -> 3 -> 4
and you are given the third node with value 3
, the linked list should become 1 -> 2 -> 4
after calling your function.
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public void deleteNode(ListNode node) {
node.val = node.next.val;
node.next = node.next.next;
}
}
203. Remove Linked List Elements
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
/**
* 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) {
ListNode dummpy = new ListNode(0);
dummpy.next = head;
head = dummpy;
while(head.next!=null){
if(head.next.val == val){
head.next = head.next.next;
}else{
head = head.next;
}
}
return dummpy.next;
}
}
82. Remove Duplicates from Sorted List II
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,
Given 1->2->3->3->4->4->5
, return 1->2->5
.
Given 1->1->1->2->3
, return 2->3
.
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
//因为可能原先的头结点也存在重复,所以头结点不确定,这时候可以考虑使用dummpy Node
class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode dummpy = new ListNode(0);
dummpy.next = head;
head = dummpy;
while(head.next!=null && head.next.next!=null){
if(head.next.val == head.next.next.val){
//删掉所有重复的元素
int val = head.next.val;
while(head.next != null && head.next.val == val){
head.next = head.next.next;
}
}else{
//往后移动一位
head = head.next;
}
}
return dummpy.next;
}
}