程序设计题: 单链表实验
1.从键盘输入若干大于0的整数,用这些整数构造一个单链表.当用户输入小于等于0的值时创建链表结束并在终端打印输出这个链表。
2.在链表中查找某结点,如果能找到输出这个结点是第几个结点,如果找不到,输出:找不到此结点。
3.删除指定结点: 如果指定的被删除结点存在就删除它,然后打印:已经删除,如果不存在,输出信息: 链表中没有此结点,无法删除。
4.删除重复结点:如果链表中有重复的元素,删除重复的元素,使得所有值最多只出现一次,例如,如果链表中有3个结点的值是100,那么需要删除两个值为100的结点。只保留一个值为100的结点。删除重复结点后打印输出整个链表
C++:
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:
#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;
}