关于LeetCode中Remove Linked List Elements一题的理解
来源:互联网 发布:算法设计与分析王秋芬 编辑:程序博客网 时间:2024/06/08 05:27
题目如下:
Remove all elements from a linked list of integers that have value val.
Example
Given: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6
Return: 1 --> 2 --> 3 --> 4 --> 5
public ListNode removeElements(ListNode head, int val) { ListNode node1 = head; ListNode pre = null; while(node1!=null){ if(node1.val!=val){ pre = node1; }else{ if(pre==null){ head = node1.next; }else{ pre.next = node1.next; } } node1 = node1.next; } return head; }这里需要特别注意的就是第一个节点就是需要删除的节点这种情况,这时候要将node1即第一个节点的值赋值给head,那结束后返回的head就应该从此处开始(假如后面紧跟着的节点值不是val的话,如果紧跟着的节点的值是val,那就需要重复上述步骤直到第一个非val节点出现为止)。另外一点就是,假如在一次循环中删除了一个节点,那pre的位置是不需要变化的,因为pre的next已经变成了另一个新节点,这个新节点就是下次需要进行判断的,所以没必要将pre进行移动。
然后是评论区的大神代码,其中有一个是使用大家喜闻乐见的递归形式的,代码如下:
public ListNode removeElements(ListNode head, int val) { if (head == null) return null; head.next = removeElements(head.next, val); return head.val == val ? head.next : head;}
递归的思想就是逐步解决子问题,这个和之前有一道题的递归解法十分类似,右面的是之前一篇博客的链接,讲的也是和链表递归操作相关的一些问题:http://blog.csdn.net/zsy112371/article/details/52415591。
评论区的另一种方法,和我使用的方法思想类似,但是可能更简练一些,代码如下:
public ListNode removeElements(ListNode head, int val) { ListNode top=new ListNode(0); top.next=head; ListNode node=top; while(node.next!=null) { if(node.next.val==val) { node.next=node.next.next; }else{ node=node.next; } } return top.next; }还有下面这种思想都是一样的。
public ListNode removeElements(ListNode head, int val) { ListNode fakeHead = new ListNode(-1); fakeHead.next = head; ListNode curr = head, prev = fakeHead; while (curr != null) { if (curr.val == val) { prev.next = curr.next; } else { prev = prev.next; } curr = curr.next; } return fakeHead.next; }今天有些不开心,sad。
1 0
- 关于LeetCode中Remove Linked List Elements一题的理解
- leetcode 203. Remove Linked List Elements | 递归的更多理解
- 【leetcode每日一题】203.Remove Linked List Elements
- leetcode 每日一题 203. Remove Linked List Elements
- 关于LeetCode中Palindrome Linked List一题的理解
- 关于LeetCode中Linked List Cycle一题的理解
- [LeetCode] Remove Linked List Elements
- [LeetCode]Remove Linked List Elements
- Leetcode--Remove Linked List Elements
- [LeetCode]Remove Linked List Elements
- leetcode Remove Linked List Elements
- [LeetCode] Remove Linked List Elements
- [leetcode]Remove Linked List Elements
- leetcode--Remove Linked List Elements
- [LeetCode] Remove Linked List Elements
- 【leetcode】Remove Linked List Elements
- LeetCode:Remove Linked List Elements
- [leetcode]Remove Linked List Elements
- java学习之路 之 网络编程
- sshhipot:一款高交互的SSH蜜罐
- Android数据存储详解
- Maven-archetype和plugin
- javascript入门基础(三) 正则表达式
- 关于LeetCode中Remove Linked List Elements一题的理解
- C++多重继承中的内存模型
- CISSP认证的考核范围包括10个方向
- mysql next-key locking
- POJ2299-Ultra-QuickSort
- 学习Hadoop第四课(Hadoop初始化和测试)
- css的基础内容
- PHP笔记--字符串操作
- [Lintcode] Continuous Subarray Sum