7-7 单向链表1
分数 10
全屏浏览
切换布局
作者 wangxiu
单位 福州大学
链表节点定义为:
struct Node{
int data;
struct Node *next;
}
编程实现:输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入若干个正整数(输入-1为结束标志),建立一个单向链表,将其中的奇数值结点删除后输出
输入输出示例:括号内为说明
输入样例:
2 (repeat=2)
1 2 3 4 5 6 7 -1
1 3 5 -1
输出样例:
2 4 6
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
我的解答:
#include<iostream>
using namespace std;
//创建链表的一个框框
struct ListNode {
int val;
ListNode* next;
ListNode(int x) :val(x), next(nullptr) {}
};
//创建链表
class LinkedList {
public:
ListNode* head;
//创建头指针
LinkedList() {
head = NULL;
}
//输入框框函数
void append(int val) {
ListNode* newNode = new ListNode(val);
if (!head) {
head = newNode;
return;
}
ListNode* current = head;
while (current->next) {
current = current->next;
}
current->next = newNode;
}
//输入链表
void input() {
int val;
while (cin >> val && val != -1) {
append(val);
}
}
//删除节点函数(主动找节点并且从某一位置开始)
void deleteNode(ListNode*&head,int val) {
if (!head) {
return;
}
if (head->val == val) {
ListNode* temp = head;
head = head->next;
delete temp;
return;
}
ListNode* current = head;
while (current->next) {
if (current->val == val) {
ListNode* temp = current->next;
current->next = current->next->next;
delete temp;
return;
}
current = current->next;
}
}
//删除奇数节点函数
void deleteorr() {
while (head && head->val % 2 != 0) {
deleteNode(head, head->val);
}
ListNode* current = head;
while (current&¤t->next) {
if (current->next->val%2!=0) {
deleteNode(current->next,current->next->val);
}
else {
current = current->next;
}
}
}
//输出函数
void print() {
ListNode* current = head;
if (current!=NULL) {
while (current) {
cout << current->val;
if(current->next){
cout<< " ";
}
current = current->next;
}
cout << endl;
}
else {
return;
}
}
};
int main() {
int repeat;
cin >> repeat;
LinkedList list[10];
for (int i = 0; i < repeat;i++) {
list[i].input();
list[i].deleteorr();
}
for (int i = 0; i < repeat; i++) {
list[i].print();
}
return 0;
}
注意这道题最后一空不能有空格,调试了好久才调试出来