5-1 Leetcode中和链表相关的问题
Posted 创造型快乐or享受型
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5-1 Leetcode中和链表相关的问题相关的知识,希望对你有一定的参考价值。
lectcode 203. 移除链表元素
删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4->5
方法1 不采用虚拟头结点
1 public class ListNode { 2 3 public int val; 4 public ListNode next; 5 6 public ListNode(int x) { 7 val = x; 8 } 9 }
1 class Solution { 2 3 public ListNode removeElements(ListNode head, int val) { 4 //1.首先考虑头结点(循环的开始部分) 5 while(head != null && head.val == val){ //如果head的值=val,同时访问head.val有一个默认条件:head要满足head不为空。删除头结点后,新的头结点可能还有head.val == val,所以用while,不用if 6 ListNode delNode = head; 7 head = head.next; 8 delNode.next = null;//delNode和链表断掉关系 9 } 10 11 if(head == null) //head == null:头结点为空,即整个链表为空,此时后面的逻辑就不需要运行了,直接返回head 12 return head; //其实就是返回null 13 //2.删除链表中间的节点值等于val 14 ListNode prev = head; 15 while(prev.next != null){ //while循环删除链表中间值等于val的节点 16 if(prev.next.val == val) { 17 ListNode delNode = prev.next; 18 prev.next = delNode.next; 19 delNode.next = null; 20 } 21 else 22 prev = prev.next; 23 } 24 25 return head; 26 } 27 }
其实
等价于
2.采用虚拟头结点
1 class Solution3 { 2 3 public ListNode removeElements(ListNode head, int val) { 4 5 ListNode dummyHead = new ListNode(-1);//dummyHead是虚拟头结点,永远不会访问它的值,所以在这里随便给了一个值,给-1. 6 dummyHead.next = head; 7 8 ListNode prev = dummyHead; 9 while(prev.next != null){ //while循环删除链表中间值等于val的节点 10 if(prev.next.val == val) 11 prev.next = prev.next.next; 12 else 13 prev = prev.next; 14 } 15 16 return dummyHead.next; 17 } 18 }
以上是关于5-1 Leetcode中和链表相关的问题的主要内容,如果未能解决你的问题,请参考以下文章
[LeetCode]剑指 Offer 34. 二叉树中和为某一值的路径
[LeetCode]剑指 Offer 34. 二叉树中和为某一值的路径
817. Linked List Components - LeetCode