【剑指Offer】链表的基本操作之创建、插入、删除
// C++
#include<iostream>
using namespace std;
//链表的定义
struct ListNode
{
int val;
ListNode* next;
ListNode(int n) :val(n), next(nullptr) {}
};
//链表的打印
void printList(ListNode* head)
{
ListNode* pT = head;
while (pT != nullptr)
{
cout << pT->val << " ";
pT = pT->next;
}
}
//链表的创建(头插法),注意打印时候倒着打印
ListNode* createListA(ListNode* head, int* arr, int len)
{
ListNode* pB = head;
for (int i = 0; i < len; ++i)
{
ListNode* pA = new ListNode(0); //注意:
pA->val = arr[i];
pA->next = pB->next;
pB->next = pA;
}
head = head->next; //不要初始的头结点,否则会打印出0
return head;
}
//链表的创建(尾插法)
ListNode* createListB(ListNode* head, int* arr, int len)
{
ListNode* pB = head;
for (int i = 0; i < len; ++i)
{
ListNode* pA = new ListNode(0); //注意:
pA->val = arr[i];
pB->next = pA;
pB = pA;
}
head = head->next; //不要初始的头结点,否则会打印出0
pB->next = nullptr; //注意尾插法最后需要置空
return head;
}
//链表节点的插入
void insertVarofList(ListNode* head, int pos, int val)
{
int cnt = 0;
ListNode* temp = new ListNode(val);
while (head != nullptr)
{
head = head->next;
++cnt;
if (cnt == pos)
{
temp->next = head->next; //注意:顺序不能改变
head->next = temp;
break;
}
}
}
//链表节点的删除
void deleteValofList(ListNode* head, int pos)
{
int cnt = 0;
ListNode* temp = new ListNode(0);
while (head != nullptr)
{
head = head->next;
++cnt;
if (cnt == pos)
{
temp= head->next; //令temp指向被删除节点
head->next = temp->next;
delete temp;
break;
}
}
}
int main()
{
int arr[] = { 10,15,96,18,2,22,6,2 };
ListNode* head = new ListNode(0);
ListNode* L = createListB(head, arr, 8);
printList(L);
cout << endl;
insertVarofList(L, 3, 100);
printList(L);
cout << endl;
deleteValofList(L, 3);
printList(L);
cout << endl;
return 0;
}
【剑指Offer】链表的基本操作之创建、插入、删除的更多相关文章
- 【剑指offer】以o(1)复杂度删除啊链表的节点,C++实现(链表)
0.简介 本文是牛客网<剑指offer>刷题笔记. 1.题目 在O(1)时间内删除链表节点. 2.思路 前提条件:删除的节点在链表上:边界条件:链表 ...
- 剑指Offer编程题(Java实现)——删除链表中重复的结点
题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...
- 剑指Offer 链表中倒数第k个结点
题目描述 输入一个链表,输出该链表中倒数第k个结点. 思路: 法1:设置2个指针p,q.p先移动k次,然后pq同时后移,p到链表尾尾的时候,q指向倒数第k个节点. 注意://需要考虑k=0,以 ...
- 剑指offer——链表中倒数第k个结点
输入一个链表,输出该链表中倒数第k个结点. class Solution { public: ListNode* FindKthToTail(ListNode* pListHead, unsigned ...
- 剑指offer——python【第56题】删除链表中的重复节点
题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...
- 《剑指offer》第十八题(删除链表中重复的结点)
// 面试题18(二):删除链表中重复的结点 // 题目:在一个排序的链表中,如何删除重复的结点?例如,在图3.4(a)中重复 // 结点被删除之后,链表如图3.4(b)所示. #include &l ...
- 剑指Offer——链表中环的入口结点
题目描述: 一个链表中包含环,请找出该链表的环的入口结点. 分析: 设置两个指针p1,p2, 两个指针都从链表的头部开始走,不过p1每次走一步,p2每次走两步. 直到相遇的时候,p2走的长度是p1的两 ...
- 剑指Offer——链表中倒数第k个节点
Question 输入一个链表,输出该链表中倒数第k个结点. Solution 一种想法就是扫描两边,第一遍求出总的节点个数,第二遍从头开始走n-k个 第二种思想类似于fast-slow指针的方法,f ...
- 剑指offer——链表相关问题总结
首先统一链表的数据结构为: struct ListNode { int val; struct ListNode *next; ListNode(int x) :val(x), next(NULL) ...
- python剑指offer 链表中环的入口节点
题目: 一个链表中包含环,请找出该链表的环的入口结点. 思路: 先说个定理:两个指针一个fast.一个slow同时从一个链表的头部出发, fast一次走2步,slow一次走一步,如果该链表有环,两个指 ...
随机推荐
- 题解-CF429C Guess the Tree
题面 CF429C Guess the Tree 给一个长度为 \(n\) 的数组 \(a_i\),问是否有一棵树,每个节点要么是叶子要么至少有两个儿子,而且 \(i\) 号点的子树大小是 \(a_i ...
- Codeforces Edu Round 58 A-E
A. Minimum Integer 如果\(d < l\),则\(d\)满足条件 否则,输出\(d * (r / d + 1)\)即可. #include <cstdio> #in ...
- 题解-[CEOI2017]Building Bridges
[CEOI2017]Building Bridges 有 \(n\) 个桥墩,高 \(h_i\) 重 \(w_i\).连接 \(i\) 和 \(j\) 消耗代价 \((h_i-h_j)^2\),用不到 ...
- Nginx安装配置教程
转自https://www.cnblogs.com/zhouxinfei/p/7862285.html nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是 ...
- 在Qt中配置海康工业相机SDK及遇到的问题(报错)
1.在项目的.pro文件里导入海康工业相机的SDK路径 INCLUDEPATH += \ D:\HKVersion\MVS_3.1.0\MVS\Development\Includes #这时到入Op ...
- 系统类 System类
System类代表系统,系统级的很多属性和控制方法都放置在该类的内部.该类位于java.lang包. 由于该类的构造方法是private的,所以无法创建该类的对象,也就是无法实例化该类.其内部的成员变 ...
- react第十七单元(redux和组件之间的通信,react-redux的相关api的用法)
第十七单元(redux和组件之间的通信,react-redux的相关api的用法) #课程目标 什么是redux-redux react-redux的作用是什么 react-redux如何应用 #知识 ...
- [水题日常]Luogu1113 杂务
这几天又在颓. 我的blog难度目前还比较低,主要面向像我这样子的新手(当然内容也会尽量讲得具体清楚一些)x 如果有错误还请指出~ 写完随笔之后才去翻了一下这题题解之后才注意到这题是有序的 QAQ完全 ...
- Python高级语法-多继承MRO相关-args和kwargs(4.5.2)
@ 目录 1.说明 2.代码 关于作者 1.说明 args数据类型为元组 kwargs数据类型为字典 一般传入方法中使用遍历去得到值 这个传入参数的顺序没有特殊的要求 当你自定义的参数传完以后,写了名 ...
- Linux 修改权限,查看进程,结束进程 命令
在linux终端先输入ll,可以看到bai如:-rwx-r--r-- (一共10个参数) 表示文件所属组和du用户的对应权限.zhi第一个跟dao参数属于管理员,跟chmod无关,先不管.2-4参数: ...