线性表——链表实现(单链表)

Posted GGBeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线性表——链表实现(单链表)相关的知识,希望对你有一定的参考价值。

#include <iostream>
#include <cstdio>
#include <cstdlib>

using namespace std;

using ElemType = int;

// 单链表结构 
class Node {
public:
	ElemType data;
	Node *next;
}; 


// 初始化单链表 
void initList(Node *head)
{
	char ch;
	int val;
	Node *q = head;
	while(1) {
		cout << "是否新增结点(y/n):";
		cin >> ch;
		if (ch == ‘n‘) {
			return;
		}
		cout << "请输入结点的值:";
		cin >> val;
		Node *p = (Node*)malloc(sizeof(Node));
		p->data = val;
		p->next = nullptr;		// 尾插法 
		q->next = p;
		q = p;
	}
}

// add
void addNode(Node *head, int i, ElemType val)
{
	Node *q = head;
	int j = 0;
	bool flag = false;
	while (q->next != NULL)
	{
		if (j != i - 1) {
			j++;
			q = q->next;		// q指向第j个结点 
		}
		if (j == i - 1) {
			flag = true;
			Node *p = (Node*)malloc(sizeof(Node));
			p->data = val;
			p->next = q->next;
			q->next = p;
			break;
		}
	}
	if (!flag) {
		cout << "fail to add node\n";
		return;
	}
}

// del
void delNode(Node *head, int i)
{
	Node *q = head;
	int j = 0;
	bool flag = false;
	while(q->next != NULL) {
		if (j == i - 1) {
			flag = true;
			if (q->next->next == NULL) {
				q->next = NULL;
			}
			else {
				q->next = q->next->next;
			}
		}
		j++;
		q = q->next;
	}
	if (!flag) {
		cout << "fail to del node\n";
		return;
	}
}

void print(Node *head)
{
	Node *q = head;
	while (q->next != NULL) {
		q = q->next;
		cout << q->data << " ";
	}
	cout << endl;
}

int main()
{
	Node *head = (Node*)malloc(sizeof(Node));
	head->next = NULL;
	initList(head);
	print(head);
	int i;
	ElemType val;
	cin >> i >> val;
	addNode(head, i, val);
	delNode(head, 1);
	print(head);
}

  

以上是关于线性表——链表实现(单链表)的主要内容,如果未能解决你的问题,请参考以下文章

线性表——链表实现(单链表)

数据结构线性表之实现单链表

初级--04---链表反转----链表实现栈队列双端队列

C中线性表和链表的区别

[Data Structure]线性表Linear List2

第二章:3.线性表---静态链表的表示和实现