链表

1.单链表

定义:别忘构造函数,struct与class无异。

// Definition for singly-linked list.
struct SinglyListNode {
    int val;
    SinglyListNode *next;
    SinglyListNode(int x) : val(x), next(NULL) {}
};

时间复杂度:查找O(n),插入O(1),删除有O(n)和O(1)。

自写简单的链表实现:

其类实现参见:链接

#include "stdafx.h"
#include <iostream>

using namespace std;

// Definition for singly-linked list.
struct SinglyListNode {
	int val;
	SinglyListNode *next;
	SinglyListNode(int x = 0, SinglyListNode * y = nullptr) : val(x), next(y) {}
};

void Display(SinglyListNode * root)//从头到尾打印链表
{
	SinglyListNode * node = root;
	while (node != nullptr)
	{
		cout << node->val << ' ';
		node = node->next;
	}
	cout << endl;
}
void DeleteOne(SinglyListNode * root, int value)//删除指定值
{
	SinglyListNode * node1 = root;
	SinglyListNode * node2 = root;
	while (node2->val != value)
	{
		node1 = node2;
		node2 = node2->next;
	}
	node1->next = node2->next;
	delete  node2;
}
void AddAtTail(SinglyListNode * root, int value)//尾部添加
{
	SinglyListNode * node = root;
	while (node->next != nullptr)
	{
		node = node->next;
	}
	SinglyListNode *node1 = new SinglyListNode(value);
	node->next = node1;

}

int main()
{
	//SinglyListNode *node1 = &SinglyListNode(4);//也可,但是删除时要注意不能用delete

	SinglyListNode *node1 = new SinglyListNode(4);
	SinglyListNode *node2 = new SinglyListNode(5, node1);
	SinglyListNode *node3 = new SinglyListNode(6, node2);
	Display(node3);

	DeleteOne(node3, 5);
	Display(node3);
	AddAtTail(node3, 10);
	Display(node3);


	system("pause");

	return 0;
}


单链表相关操作:

判断链表是否有环及环的长度、反转链表、两个链表的第一个公共节点、倒数第K个节点等(剑指offer)。

2.双链表

定义:和二叉树的定义是一样的。

// Definition for doubly-linked list.
struct DoublyListNode {
    int val;
    DoublyListNode *next, *prev;
    DoublyListNode(int x) : val(x), next(NULL), prev(NULL) {}
};

提供链表和其他数据结构(包括数组,队列和栈)之间时间复杂度的比较: 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值