203. 移除链表元素
原题链接:完成情况:解题思路:__203移除链表元素_递归遍历链表__203移除链表元素_迭代
参考代码:__203移除链表元素_递归遍历链表__203移除链表元素_迭代
原题链接:
203. 移除链表元素
https://leetcode.cn/problems/remove-linked-list-elements/description/
完成情况:
解题思路:
__203移除链表元素_递归遍历链表
递归遍历链表,然后从后往前找,判断ListNode是不是需要删除的val 之所以//尾部遍历,是因为如果删除当前的值,那么就又需要当前的前面去连接当前的后面。 而普通链表只能链接后面,不能链接前面。
__203移除链表元素_迭代
针对上面的问题,引入了dummyHead,哨位结点。
参考代码:
__203移除链表元素_递归遍历链表
package 日常Java程序测试.代码随想录.链表;
//class ListNode{
// int val;
// ListNode next;
// ListNode() {}
// ListNode(int val) { this.val = val; }
// ListNode(int val, ListNode next) { this.val = val; this.next = next; }
//}
public class __203移除链表元素_递归遍历链表 {
public ListNode removeElements(ListNode head, int val) {
if (head == null){
return head;
}
head.next = removeElements(head.next,val); //尾部遍历
return head.val == val? head.next :head;
}
}
__203移除链表元素_迭代
package 日常Java程序测试.代码随想录.链表;
class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
public class __203移除链表元素_迭代 {
public ListNode removeElements(ListNode head, int val) {
ListNode dummyHead = new ListNode(0); //从头遍历找不到头的替换位置
dummyHead.next = head; //哨位结点
//不另外构造一个temp的话,虽然遍历了一遍链表,但dummyHead就会无法把ListNode串联起来。
ListNode temp = dummyHead;
while (temp.next != null){
if (temp.next.val == val){
temp.next = temp.next.next;
}else {
temp = temp.next;
}
}
return dummyHead.next;
}
// public ListNode removeElements(ListNode head, int val) {
// ListNode dummyHead = new ListNode(0); //从头遍历找不到头的替换位置
// dummyHead.next = head; //哨位结点
// //ListNode temp = dummyHead;
// while (dummyHead.next != null){
// if (dummyHead.next.val == val){
// dummyHead.next = dummyHead.next.next;
// }else {
// dummyHead = dummyHead.next;
// }
// }
// return dummyHead.next;
// }
}
相关文章
发表评论