考试结束,班级平均分只拿到了年级第二,班主任于是问道:大家都知道世界第一高峰珠穆朗玛峰,有人知道世界第二高峰是什么吗?正当班主任要继续发话,只听到角落默默想起来一个声音:”乔戈里峰”
前言
2018.11.7号打卡 明天的题目leetcode141-环形链表: leetcode-cn.com/problems/li…
题目
leetcode203-移除链表的元素
中文链表:
英文链接:
分类:链表:
题目详述
删除链表中等于给定值 val 的所有节点。 示例: 输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4->5
题目详解
思路
- 首先是删除开头的节点与val值相等的节点;
- 然后是删除中间的与val相等的节点,采取之前的这道题的解法,就是交换当前节点与下一个节点的val值,然后把下一个节点删除就行;
- 最后处理最后的一个节点。
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode removeElements(ListNode head, int val) {
if(head == null)
return head;
while(head != null && head.val == val)
head = head.next;
if(head == null)
return head;
ListNode temp = head.next;
ListNode pre = head;
while(temp != null)
{
if(temp.next == null)
{
if(temp.val != val)
break;
pre.next = null;
break;
}
if(temp != null && temp.val == val)
{
int value = temp.next.val;
temp.val = value;
temp.next = temp.next.next;
}else
{
pre = temp;
temp = temp.next;
}
}
return head;
}
}
复制代码
代码讲解
- 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打卡群与技术交流群,欢迎关注。