IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 顺序表链表OJ题 -> 正文阅读

[数据结构与算法]顺序表链表OJ题

1、单链表的增删查改

#include "slist.h"

SListNode*BuySListNode(SLTDateType x)

{

	SListNode*node = (SListNode*)malloc(sizeof(SListNode));

	node->data = x;

	node->next = NULL;

	return node;

}

void SListPrint(SListNode*plist)

{

	SListNode*cur = plist;

	while (cur)

	{

		printf("%d->", cur->data);

		cur = cur->next;

	}

	printf("NULL\n");

}

void SListPushBack(SListNode**pplist, SLTDateType x)

{

	SListNode*newnode = BuySlistNode(x);

	if (*pplist == NULL)

	{

		*pplist == newnode;

	}

	else

	{

		SListNode*tail = *pplist;

		while (tail->next != NULL)

		{

			tail = tail->next;

		}

		tail->next = newnode;

	}

}



void SListBack(SListNode**pplist)

{

	SListNode*prev = NULL;

	SListNode*tail = *pplist;

	if (tail == NULL || tail->next == NULL)

	{

		free(tail);

		*pplist = NULL;

	}

	else

	{

		while (tail->next)

		{

			prev = tail;

			tail = tail -> next;

		}

		free(tail);

		tail = NULL;

		prev->next = NULL;

	}

}

void SListPushFront(SListNode**pplist, SLTDateType x)

{

	assert(pplist);

	SListNode*newode = BuySListNode(x);

	if (*pplist == NULL)

	{

		*pplist = newnode;

	}

	else

	{

		newnode->next = *pplist;

		*pplist = newnode;

	}

}

void SListPopFront(SListNode**pplist)

{

	SListNode*first = *pplist;

	if (first == NULL)

	{

		return;

	}

	else if (first->next == NULL)

	{

		free(first);

		*pplist = NULL;

	}

	else

	{

		SListNode*next = first->next;

		free(first);

		*pplist = next;

	}



}



SListNode*SListFind(SListNode*pplist, SLTDateType x)

{

	SListNode*cur = plist;

	while (cur)

	{

		if (cur->data == x)

			return cur;

		cur = cur->next;

	}

	return NULL;

}

void SListInsertAfter(SListNode*pos, SLTDateType x)

{

	assert(pos);

	SListNode*next = pos->next;

	SListNode*newnode = BuySListNode(x);

	pos->next = newnode;

	newnode->next = next;

}

void SListEraseAfter(SListNode*pos)

{

	assert(pos);

	SListNode*next = pos->next;

	if (next != NULL)

	{

		SListNode*nextnext = next->next;

		free(next);

		pos->next = nextnext;

	}

}

2、给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
C语言:

struct ListNode*removeElements(struct ListNode*head, int val)
{
	if (head == NULL)
	{
		return head;
	}
	head->next = removeElements(head->next, val);
	{
		return head->val == val ? head->next : head;
	}
}

c++:

class Solution
{
public:
	ListNode*removeElements(ListNode*head, int val)
	{
		if (head == nullptr)
		{
			return head;
		}
		head->next = removeElements(head->next, val);
		return head->val == val ? head->next : head;
	}
};

首先对单链表是否是空的进行判断,此后将数值进行一个判断即刻。
3、反转一个单链表
C语言

struct ListNode*reverseList(struct ListNode*head)
{
	struct ListNode*prev = NULL;
	struct ListNode*curr = head;
	while (curr)
	{
		struct ListNode*next = curr->next;
		curr->next = prev;
		pre = curr;
		curr = next;
	}
	return prev;
}

c++

class Solution
{
public:
	ListNode* reverseList(ListNode*head)
	{
		ListNode*next = nullptr;
		ListNode*curr = head;
		while (curr)
		{
			ListNode*next = curr->next;
			curr->next = prev;
			prev = curr;
			curr = next;
		}
		rerurn prev;
	}
};

对单链表进行遍历,定义pre和curr两个指针实现链表反转。
在这里插入图片描述

4、给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点
c++

class Solution
{
public:
	ListNode*middleNode(ListNode*head)
	{
		vector<ListNode*>A = { head };
		while (A.back()->next != NULL)
			A.push_back(A.back()->next);
		return A[A.size() / 2];
	}
};

链表具有缺点不能通过下标访问对应的元素,因此我们直接对链表进行一个遍历,将元素放到数组中,对应求出元素的个数,[A.size()/2]就能将中间元素求出。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-19 12:18:53  更:2021-08-19 12:20:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:49:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码