题目描述:
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。
1.此题对比原题有改动
2.题目保证链表中节点的值互不相同
3.该题只会输出返回的链表和结果做对比,所以若使用 C 或 C++ 语言,你不需要 free 或 delete 被删除的节点
解题思路:
此题解题思路也比较简单,就是从头到尾遍历链表,遇到要删除的元素即改变指针的指向即可。
需要注意的是,额外定义的两个链表相比于现有链表需要增加一个头结点,以应对链表第一个元素即是要被删除元素的情况
代码实现:
public ListNode deleteNode(ListNode node,int val){
ListNode result = new ListNode(0); // 增加头结点
result.next = node;
ListNode temp = result; // 新增两个链表,一个用于移动,另一个用于最终输出结果
while(temp.next!=null){
if(temp.next.val == val){
temp.next = temp.next.next;
break;
}
temp = temp.next;
}
return result.next; // 输出时注意去掉增加的头结点
}
总结:
1、注意程序进入循环以及结束循环的条件
2、注意最后的返回需要去掉增加的头节点
3、原则是不改变原链表的结构,所以需要额外再增加两个链表,一个用于站岗,一个用于“打仗”——找到需要删除的元素,最后返回站岗的节点