考试结束,班级平均分只拿到了年级第二,班主任于是问道:大家都知道世界第一高峰珠穆朗玛峰,有人知道世界第二高峰是什么吗?正当班主任要继续发话,只听到角落默默想起来一个声音:”乔戈里峰”
前言
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/
分类:链表:
题目详述
删除链表中等于给定值 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*/
9classSolution{
10publicListNode removeElements(ListNode head, intval) {
11if(head ==null)
12returnhead;
13while(head !=null&& head.val==val)
14head = head.next;
15if(head ==null)
16returnhead;
17ListNode temp = head.next;
18ListNode pre = head;
19while(temp !=null)
20{
21if(temp.next ==null)
22{
23if(temp.val!=val)
24break;
25pre.next =null;
26break;
27}
28if(temp !=null&& temp.val==val)
29{
30int value = temp.next.val;
31temp.val= value;
32temp.next = temp.next.next;
33}else
34{
35pre = temp;
36temp = temp.next;
37}
38
39}
40returnhead;
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打卡群与技术交流群,欢迎关注。