数据结构-链表习题(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;
}
相关推荐
艾莉丝努力练剑40 分钟前
【C++:C++11】C++11新特性深度解析:从可变参数模板到Lambda表达式
c++·stl·c++11·lambda·可变模版参数
同学小张3 小时前
【端侧AI 与 C++】1. llama.cpp源码编译与本地运行
开发语言·c++·aigc·llama·agi·ai-native
爱学习的小邓同学7 小时前
C++ --- 多态
开发语言·c++
xiaoye-duck10 小时前
计数排序:高效非比较排序解析
数据结构
稚辉君.MCA_P8_Java11 小时前
通义 插入排序(Insertion Sort)
数据结构·后端·算法·架构·排序算法
无限进步_12 小时前
C语言动态内存的二维抽象:用malloc实现灵活的多维数组
c语言·开发语言·数据结构·git·算法·github·visual studio
Swift社区12 小时前
LeetCode 432 - 全 O(1) 的数据结构
数据结构·算法·leetcode
芬加达12 小时前
leetcode34
java·数据结构·算法
leoufung13 小时前
链表题目讲解 —— 删除链表的倒数第 n 个节点(LeetCode 19)
数据结构·leetcode·链表