2018-11-06

考试结束,班级平均分只拿到了年级第二,班主任于是问道:大家都知道世界第一高峰珠穆朗玛峰,有人知道世界第二高峰是什么吗?正当班主任要继续发话,只听到角落默默想起来一个声音:”乔戈里峰

前言

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打卡群与技术交流群,欢迎关注。

你可能感兴趣的:(2018-11-06)