Linked List编程题

本文通过一道编程题探讨了链表的基本操作,包括在链表中插入元素和删除元素。题目描述了一个包含n个元素的链表,以及q次操作,操作包括在特定位置插入元素和删除元素。通过对给定输入的解析和处理,展示了如何实现这些操作并给出了示例输出。

输入文件的第一行有两个整数n,q,分别表示初始链表中元素个数和对链表操作的次数,第二行有
n个整数,表示初始链表的元素,保证这些数字不超过int表示的范围。
接下来q行,每行可能为如下两个操作之一:
1 a b表示在第a个元素后面插入值为b的元素,
2 a表示将链表中第a个元素删除,如果a大于当时链表长度,则忽略此操作

如:

输入

3 3
1 2 3
1 1 4
1 2 5
2 2

输出

1 5 2 3

#include <iostream>
#include <list>
using namespace std;
struct Operate {
	int a;
	int b;
	int c;
};

int main()
{
	int n, q;
	list<int> datalist;
	Operate Oper[100];
	memset(Oper, 0, sizeof(Oper));
	cin >> n >> q;
	int data[100];
	for (int i = 0; i < n; i++) {
		cin >> data[i];
		datalist.push_back(data[i]);
	}
	for (int j = 0; j < q; j++) {
		cin >> Oper[j].a;
		cin >> Oper[j].b;
		if (Oper[j].a == 1) {
			cin >> Oper[j].c;
		}	
	}
	for (int k = 0; k < q; k++) {
		if (Oper[k].a == 1) { 
			if (Oper[k].b > datalist.size()) { 
				continue;
			}
			else {
				auto iter = begin(datalist);
				advance
### Java 实现单链表编程练习 #### 定义单链表节点类 为了创建和操作单链表,首先定义一个表示列表节点的 `ListNode` 类。该类包含两个成员变量:存储数据项的数据域以及指向下一个结点的引用。 ```java class ListNode { int val; ListNode next; ListNode(int x) { val = x; next = null; } } ``` #### 创建并初始化单链表 可以编写一段简单的程序来构建具有若干个整数值的单向链接序列[^1]。 ```java public class LinkedListExample { private static void createLinkedList() { // 初始化头节点 ListNode head = new ListNode(1); // 添加更多节点到链表中... addNode(head, 2); // 插入第二个元素 addNode(head, 3); // 插入第三个元素 printList(head); // 输出整个链表的内容 } private static void addNode(ListNode node, int value){ if (node.next == null) { node.next = new ListNode(value); } else { addNode(node.next,value); } } private static void printList(ListNode node) { while (node != null) { System.out.print(node.val + " "); node = node.next; } } } ``` #### 寻找中间节点 给定一个带有头节点的非空单链表,返回其中间节点。如果存在两个中间节点,则返回第二个中间节点[^3]。 ```java public ListNode middleNode(ListNode head) { int length = 0; ListNode current = head; // 计算链表长度 while(current != null) { length++; current = current.next; } // 移动至中间位置 int stepsToMiddle = length / 2; for(int i = 0; i < stepsToMiddle ;i++) { head = head.next; } return head; } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值