数据结构-链表习题(C++)

程序设计题: 单链表实验

1.从键盘输入若干大于0的整数,用这些整数构造一个单链表.当用户输入小于等于0的值时创建链表结束并在终端打印输出这个链表。

2.在链表中查找某结点,如果能找到输出这个结点是第几个结点,如果找不到,输出:找不到此结点。

3.删除指定结点: 如果指定的被删除结点存在就删除它,然后打印:已经删除,如果不存在,输出信息: 链表中没有此结点,无法删除。

4.删除重复结点:如果链表中有重复的元素,删除重复的元素,使得所有值最多只出现一次,例如,如果链表中有3个结点的值是100,那么需要删除两个值为100的结点。只保留一个值为100的结点。删除重复结点后打印输出整个链表

C++:

cpp 复制代码
1------------------------------------------------------
#include <iostream>
using namespace std;

struct Node {
    int data;
    Node* next;
};

Node* createLinkedList() {
    Node* head = nullptr;
    Node* tail = nullptr;
    int input;
    while (true) {
        cin >> input;
        if (input <= 0) {
            break;
        }
        Node* newNode = new Node;
        newNode->data = input;
        newNode->next = nullptr;
        if (head == nullptr) {
            head = newNode;
            tail = newNode;
        } else {
            tail->next = newNode;
            tail = newNode;
        }
    }
    return head;
}

void printLinkedList(Node* head) {
    Node* current = head;
    while (current != nullptr) {
        cout << current->data << " ";
        current = current->next;
    }
}

int main() {
    Node* head = createLinkedList();
    printLinkedList(head);
    return 0;
}

2------------------------------------------------------
int findNodePosition(Node* head, int value) {
    Node* current = head;
    int position = 1;
    while (current != nullptr) {
        if (current->data == value) {
            return position;
        }
        current = current->next;
        position++;
    }
    return -1; // Node not found
}
int main() {
    Node* head = createLinkedList();
    int valueToFind;
    cin >> valueToFind;
    int position = findNodePosition(head, valueToFind);
    if (position != -1) {
        cout << "The node is at position: " << position << endl;
    } else {
        cout << "Node not found" << endl;
    }
    return 0;
}
3------------------------------------------------------
int findNodePosition(Node* head, int value) {
    Node* current = head;
    int position = 1;
    while (current != nullptr) {
        if (current->data == value) {
            return position;
        }
        current = current->next;
        position++;
    }
    return -1; // Node not found
}

int main() {
    Node* head = createLinkedList();
    int valueToFind;
    cin >> valueToFind;
    int position = findNodePosition(head, valueToFind);
    if (position != -1) {
        cout << "The node is at position: " << position << endl;
    } else {
        cout << "Node not found" << endl;
    }
    return 0;
}
4------------------------------------------------------
Node* removeDuplicates(Node* head) {
    Node* current = head;
    while (current != nullptr) {
        Node* runner = current;
        while (runner->next != nullptr) {
            if (runner->next->data == current->data) {
                Node* temp = runner->next;
                runner->next = runner->next->next;
                delete temp;
            } else {
                runner = runner->next;
            }
        }
        current = current->next;
    }
    return head;
}

int main() {
    Node* head = createLinkedList();
    head = removeDuplicates(head);
    printLinkedList(head);
    return 0;
}

C:

cs 复制代码
#include <stdio.h>
#include <stdlib.h>

struct Node {
    int data;
    struct Node* next;
};

struct Node* createLinkedList() {
    struct Node* head = NULL;
    struct Node* tail = NULL;
    int input;
    while (1) {
        scanf("%d", &input);
        if (input <= 0) {
            break;
        }
        struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
        newNode->data = input;
        newNode->next = NULL;
        if (head == NULL) {
            head = newNode;
            tail = newNode;
        } else {
            tail->next = newNode;
            tail = newNode;
        }
    }
    return head;
}

void printLinkedList(struct Node* head) {
    struct Node* current = head;
    while (current != NULL) {
        printf("%d ", current->data);
        current = current->next;
    }
}

int findNodePosition(struct Node* head, int value) {
    struct Node* current = head;
    int position = 1;
    while (current != NULL) {
        if (current->data == value) {
            return position;
        }
        current = current->next;
        position++;
    }
    return -1; // Node not found
}

struct Node* removeDuplicates(struct Node* head) {
    struct Node* current = head;
    while (current != NULL) {
        struct Node* runner = current;
        while (runner->next != NULL) {
            if (runner->next->data == current->data) {
                struct Node* temp = runner->next;
                runner->next = runner->next->next;
                free(temp);
            } else {
                runner = runner->next;
            }
        }
        current = current->next;
    }
    return head;
}

int main() {
    struct Node* head = createLinkedList();
    printLinkedList(head);
    int valueToFind;
    scanf("%d", &valueToFind);
    int position = findNodePosition(head, valueToFind);
    if (position != -1) {
        printf("The node is at position: %d\n", position);
    } else {
        printf("Node not found\n");
    }
    head = removeDuplicates(head);
    printLinkedList(head);
    return 0;
}
相关推荐
蒙奇·D·路飞-14 小时前
OpenClaw:开源的《合金弹头》精神续作与终极本地部署指南
c++·开源·mfc
小星星闪亮登场16 小时前
2026萌新联赛第三场-- (郑州轻工业大学)
数据结构·c++·经验分享·算法·贪心算法·排序算法·深度优先
梓䈑16 小时前
【用 Vibe Coding 实现的 C++17 在线判题系统】前端开发 + Web 自动化测试
前端·c++·ai编程
冻柠檬飞冰走茶16 小时前
PTA基础编程题目集 7-8超速判断(C++语言实现)
开发语言·数据结构·c++·算法
TunerT_TQ17 小时前
Valhalla 静态工程审阅 #018|MMCV 源码证据驱动评测【大厂开源基础设施特辑】
c++·开源·mfc·#计算机视觉·#商汤科技·#openmmlab·#静态源码审计
2501_9423895517 小时前
Epoch AI旗下FrontierMath的负责人Elliot Glazer
数据结构·决策树·动态规划·散列表
别动我齐刘海18 小时前
Day6 unitree_G1人形机器人GMR—— MotionInput
c语言·c++·人工智能·学习·机器学习·机器人·github
shylyly_18 小时前
104.二叉树的最大深度
数据结构·算法·104.二叉树的最大深度
Henry Zhu12319 小时前
C++17 `weak_from_this` 详解:让对象安全地观察自己
c++
June`1 天前
warp shuffle指令
c++·人工智能·算法·cuda