代码
第一种写法,多使用了一个辅助指针
public ListNode deleteNode(ListNode head, int val) {
if (head == null) return null;
// 首先分析在首部的情况
if (head.val == val) {
return head.next;
}
// 后面表示不在首部的情况,使用两个指针进行遍历,一个快,一个慢。
ListNode temp = head;
ListNode temp2 = head;
temp = temp.next;
while (temp != null && temp.val != val) {
temp2 = temp2.next;
temp = temp.next;
}
// 此时的必然结果是temp.val的值 == val,temp2在前一个
temp2.next = temp.next;
return head;
}
代码
第二种写法,少使用一个辅助指针
public ListNode deleteNode(ListNode head, int val) {
if (head == null) return null;
// 首先分析在首部的情况
if (head.val == val) {
return head.next;
}
// 后面表示不在首部的情况,使用两个指针进行遍历,一个快,一个慢。
ListNode temp = head;
while (temp.next != null && temp.next.val != val) {
temp = temp.next;
}
temp.next = temp.next.next;
// 此时的必然结果是temp.next.val的值 == val
return head;
}