每天一道leetcode203-移除链表的元素
考试结束,班级平均分只拿到了年级第二,班主任于是问道:大家都知道世界第一高峰珠穆朗玛峰,有人知道世界第二高峰是什么吗?正当班主任要继续发话,只听到角落默默想起来一个声音:”乔戈里峰”
前言
2018.11.7号打卡
明天的题目leetcode141-环形链表:
https://leetcode-cn.com/problems/linked-list-cycle/
题目
leetcode203-移除链表的元素
中文链表:
https://leetcode-cn.com/problems/remove-linked-list-elements/description/
英文链接:
https://leetcode.com/problems/remove-linked-list-elements/description/
分类:链表
5b4
:
题目详述
删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
题目详解
思路
首先是删除开头的节点与val值相等的节点;
然后是删除中间的与val相等的节点,采取之前的这道题的解法,就是交换当前节点与下一个节点的val值,然后把下一个节点删除就行;
最后处理最后的一个节点。
代码
1/** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { val = x; } 7 * } 8 */ 9class Solution { 10 public ListNode removeElements(ListNode head, int val) { 11 if(head == null) 12 return head; 13 while(head != null && head.val == val) 14 head = head.next; 15 if(head == null) 16 return head; 17 ListNode temp = head.next; 18 ListNode pre = head; 19 while(temp != null) 20 { 21 if(temp.next == null) 22 { 23 &n 27e4 bsp; if(temp.val != val) 24 break; 25 pre.next = null; 26 break; 27 } 28 if(temp != null && temp.val == val) 29 { 30 int value = temp.next.val; 31 temp.val = value; 32 temp.next = temp.next.next; 33 }else 34 { 35 pre = temp; 36 temp = temp.next; 37 } 38 39 } 40 return head; 41 } 42}
代码讲解
13-14行去判断开头的节点,如果头结点与val值相等,那么该删除,直到头结点值不相等
17-18行是保留一个pre的前置节点,以便删除最后一个节点(如果与val相等)
21-27行是处理最后一个节点,如果最后一个节点是val,那么删除最后一个节点,pre的下一个就是最后一个节点;
28-32行如果中间的当前节点与val值相等,那么通过交换当前节点的值与下一个节点的值以后,删除一个节点的;
35-36行如果与val不相等,那么直接继续往前移动。
结束语
2018.11。7打卡
作者乔戈里亲历2019秋招,哈工大计算机本硕,百度准入职java工程师,欢迎大家关注我的微信公众号:程序员乔戈里,公众号有3T编程资源,以及我和我朋友(准入职百度C++工程师)在秋招期间整理的近200M的面试必考的java与C++面经,并有每天一道leetcode打卡群与技术交流群,欢迎关注。
- 每天一道LeetCode-----将数组/链表后k个元素移动到前面
- LeetCode 203 Remove Linked List Elements(移除链表元素)(*)
- 每天一道LeetCode-----移除有序链表中的重复节点
- 每天一道LeetCode--141.Linked List Cycle(链表环问题)
- 每天一道LeetCode-----在有序的二维数组中查找某个元素
- 每天一道LeetCode-----判断链表是否有环,如果有,找到环的入口位置
- 每天一道LeetCode-----从有序数组中删除重复元素
- 每天一道LeetCode-----链表排序,要求复杂度在O(nlogn)
- 每天一道LeetCode-----有序数组右移n位后查找某个元素
- 每天一道LeetCode-----寻找二叉搜索树中第k小的元素
- 每天一道LeetCode-----数组序列,每个元素的值表示最多可以向后跳多远,计算最少跳多少次可以到达末尾
- 每天一道leetcode234-回文链表
- 每天一道LeetCode-----找到1,2,...,n这n个数所有的组合,每个组合有k个元素,且元素大小递增
- 每天一道LeetCode-----链表插入排序
- leetcode 203. Remove Linked List Elements-移除链表元素
- Leetcode:203 Remove Linked List Elements(删除链表中的某个元素))
- 每天一道LeetCode-----寻找地增序列中第一个大于等于目标元素的位置
- 每天一道LeetCode-----复制一个带有随机节点的链表
- 每天一道LeetCode-----给定序列中2/3/4个元素的和为target的所有集合,或3个元素的和最接近target的集合
- LeetCode 83 Remove Duplicates from Sorted List(从已排序链表中移除重复元素)(*)