LeetCode--链表3-经典问题
LeetCode--链表3-经典问题
题1 反转链表
第一次代码超出时间限制
原因是,反转之后链表的尾部节点和头结点连上了
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
// 如果头节点为空
if(!head)
return NULL;
// 如果链表中只有一个节点
if(!head->next)
return head;
//
ListNode* cur = head;
ListNode* pre = nullptr;
while( cur )
{
ListNode* tmp = cur->next;
cur->next = pre;
pre = cur;
cur = tmp;
}
return pre;
}
};
题2 合并两个有序链表
通过测试:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
// 如果有一个链表为空就返回另一个
if(!l1) return l2;
if(!l2) return l1;
// 创建一个新的链表指针
ListNode* p1 = l1;
ListNode* p2 = l2;
ListNode* head;
if(p1->val >= p2->val)
{
head = p2;
p2 = p2->next;
}else{
head = p1;
p1 = p1->next;
}
ListNode* p = head;
// p1和p2都不为空的时候开始拼接
while( p1 != nullptr && p2 != nullptr )
{
if( p1->val >= p2->val)
{
p->next = p2;
p2 = p2->next;
}else{
p->next = p1;
p1 = p1->next;
}
p = p->next;
}
if(!p2)
{
p->next = p1;
}
if(!p1)
{
p->next = p2;
}
return head;
}
};
题3 删除链表中的节点
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
void deleteNode(ListNode* node) {
if( node->next == nullptr )
{
node = nullptr;
}
node->val = node->next->val;
node->next = node->next->next;
}
};
题4 移除链表元素
错误示例,拼接链表的时候一定要注意:指向链表节点的指针可能连着好多个节点
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
if( head == nullptr) return NULL;
queue<ListNode*> ss;
ListNode* p = head;
while(p)
{
if( p->val != val)
{
ss.push(p);
p = p->next;
}
else{
p = p->next;
}
}
ListNode* ans = ss.front();
ListNode* pp = ans;
ss.pop();
ans = ans->next;
while(!ss.empty())
{
ans = ss.front();
ss.pop();
ans = ans->next;
}
return pp;
}
};
LeetCode--链表3-经典问题的更多相关文章
- [LeetCode] [链表] 相关题目总结
刷完了LeetCode链表相关的经典题目,总结一下用到的技巧: 技巧 哑节点--哑节点可以将很多特殊case(比如:NULL或者单节点问题)转化为一般case进行统一处理,这样代码实现更加简洁,优雅 ...
- Leetcode链表
Leetcode链表 一.闲聊 边学边刷的--慢慢写慢慢更 二.题目 1.移除链表元素 题干: 思路: 删除链表节点,就多了一个判断等值. 由于是单向链表,所以要删除节点时要找到目标节点的上一个节点, ...
- [LeetCode] 链表反转相关题目
暂时接触到LeetCode上与链表反转相关的题目一共有3道,在这篇博文里面总结一下.首先要讲一下我一开始思考的误区:链表的反转,不是改变节点的位置,而是改变每一个节点next指针的指向. 下面直接看看 ...
- LeetCode链表解题模板
一.通用方法以及题目分类 0.遍历链表 方法代码如下,head可以为空: ListNode* p = head; while(p!=NULL) p = p->next; 可以在这个代码上进行修改 ...
- LeetCode链表相加-Python<二>
上一篇:LeetCode两数之和-Python<一> 题目:https://leetcode-cn.com/problems/add-two-numbers/description/ 给定 ...
- leetcode 链表类型题总结
链表测试框架示例: // leetcodeList.cpp : 定义控制台应用程序的入口点.vs2013 测试通过 // #include "stdafx.h" #include ...
- leetcode链表相关
目录 2/445两数相加 综合题(328奇偶链表, 206反转链表, 21合并两个有序链表 ) 92反转链表 II 链表排序(148排序链表, 876链表的中间结点) 142环形链表 II 160相交 ...
- LeetCode 链表题 ( Java )
leetcode 237. 删除链表中的节点 链接:https://leetcode-cn.com/problems/delete-node-in-a-linked-list/ 示例 : 输入: he ...
- LeetCode 链表的插入排序
Sort a linked list using insertion sort 创建一个新的链表,将旧链表的节点插入到正确的位置 package cn.edu.algorithm.huawei; pu ...
- leetcode 链表类型题目解题总结
最基础的方式要做到非常熟练,要熟练到不思考就能写,但又需明白各处的要求和陷阱 合并两个有序链表的操作,在前面加上一个初始节点,注意while循环和退出时的处理,理解如何处理其中一个链表遍历完的情况 L ...
随机推荐
- EXAM-2018-08-21
EXAM-2018-08-21 自己真的是菜的恐怖 D:Fence Building 欧拉公式:V-E+F=2 在平面中:V为顶点个数,E为边数,F为区域数 在简单几何体中:V为顶点个数,E为边数,F ...
- [LC] 146. LRU Cache
Design and implement a data structure for Least Recently Used (LRU) cache. It should support the fol ...
- P2486 [SDOI2011]染色 区间合并+树链剖分(加深对线段树的理解)
#include<bits/stdc++.h> using namespace std; ; struct node{ int l,r,cnt,lazy; node(,,,):l(l1), ...
- single-value grouping |limit grouping|cutpoint grouping|Lower class limit|Upper class limit|Class width|Class mark|rounding error or roundoff error|Histograms|Dotplots|Stem-and-Leaf
2.3 Organizing Quantitative Data group quantitative data: To organize quantitative data, we first gr ...
- 线程中调用service方法出错
public class PnFileTGIComputeThread implements Runnable { @Resource private AppUsedService appUsedSe ...
- left join on注意点
右侧表的条件参数需要放在on后面 where 后面进放置左表的条件参数 比如消息表和用户消息表 消息表里存在类型为<系统消息>的消息是发送给全部用户 我们发送给系统消息时,不直接插入用户消 ...
- springboot shiro ehcache redis 简单使用
引入相关pom <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- 用Kinect为听障人士架一座沟通的桥梁
编者按:这是微软亚洲研究院和中国科学院共同进行的一个合作项目,希望通过使用Kinect来帮助提升手语的识别率,从而为听力受损的残障人士(以下简称听障人士)架起一座与外界沟通的桥梁. 文章译自:Digi ...
- Vue创建项目及基本语法 一
目录 目录: 一.创建Vue项目 0.使用环境要求及说明 1.使用命令创建项目 2.启动项目 二.简单指令 1.变量: 2.动态绑定变量值 3.v-once指令 4.v-html解析html 5.v- ...
- confessed to doing|conform|confined|entitle|
to admit that you have done something wrong or something that you feel guilty or bad about 坦白:供认,招认: ...