解题思路
遍历一遍整个链表,遇到每个元素先判断是否等于要删除的结点的值,等于则删除,否则判断下一个结点,直到最后一个节点
解题代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode deleteNode(ListNode head, int val) {
if(head.val == val) //当头结点是要删除的结点时
{
head = head.next;
return head;
}else{ //当头结点不是要删除的结点时
ListNode p = head.next,pre = head;
while(p != null)
{
if(p.val == val)
{
pre.next = p.next;
p = p.next;
}else{
pre = p;
p = p.next;
}
}
return head;
}
}
}
总结
这道题唯一需要注意的点是,题目所给为头指针而非头结点,故当处理第一个结点是要删除的结点的时候,需要另外讨论。