本题目要求实现下面三个函数,实现如下功能: 输入若干个正整数,以-1结束,采取向链表中添加节点的方式来建立一个单向链表。 遍历并输出这个单向链表。
时间: 2023-05-02 08:01:16 浏览: 220
题目要求实现下面三个函数,实现如下功能:输入若干个正整数,以-1结尾,采取向链表中添加节点的方式来建立一个单向链表。遍历并输出这个单向链表。
函数1:add(num, head),实现向链表中添加节点的功能,num为要添加的整数,head表示链表头指针。
函数2:create(head),实现建立单向链表的功能,head表示链表头指针。
函数3:traversal(head),实现遍历输出单向链表的功能,head表示链表头指针。
相关问题
编程实现:输入若干个正整数(输入-1为结束标志),建立一个单向链表,将其中的偶数值结点删除后输出。链表节点定义为: struct Node{ int data; struct Node *next; } 输入输出示例:括号内为说明 输入样例: 1 2 3 4 5 6 7 -1 输出样例: 1 3 5 7 用c语言程序写代码 按照输入和输出要求写
以下是一个可能的实现:
```c
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node *next;
};
void print_list(struct Node *head) {
struct Node *p = head;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
void delete_even_nodes(struct Node **head) {
struct Node *p = *head;
struct Node *prev = NULL;
while (p != NULL) {
if ((p->data) % 2 == 0) {
if (prev != NULL) {
prev->next = p->next;
} else {
*head = p->next;
}
struct Node *temp = p;
p = p->next;
free(temp);
} else {
prev = p;
p = p->next;
}
}
}
int main() {
int x;
struct Node *head = NULL;
struct Node *tail = NULL;
scanf("%d", &x);
while (x != -1) {
struct Node *temp = (struct Node *) malloc(sizeof(struct Node));
temp->data = x;
temp->next = NULL;
if (tail == NULL) {
head = temp;
tail = temp;
} else {
tail->next = temp;
tail = temp;
}
scanf("%d", &x);
}
delete_even_nodes(&head);
print_list(head);
return 0;
}
```
程序先定义了一个结构体 `Node`,表示链表的结点。然后实现了两个函数:
- `print_list`:用于打印链表的所有结点的数据。
- `delete_even_nodes`:用于删除链表中所有值为偶数的结点。
主函数中首先定义了一个指向链表头部的指针 `head` 和一个指向链表尾部的指针 `tail`,并初始化为 `NULL`。然后程序通过循环读取输入,创建新的结点,并将其加入到链表中。当读入 `-1` 时,输入结束。接着调用 `delete_even_nodes` 函数,删除链表中所有值为偶数的结点。最后调用 `print_list` 函数,打印剩余的链表结点的数据。注意,在 `delete_even_nodes` 函数中,使用了一个指向指针的指针 `head`,这是因为如果要删除链表头部的结点,需要改变 `head` 的值,而普通指针无法改变变量的值,只能改变变量所指向的值。
编程实现:输入若干个正整数(输入-1为结束标志),建立一个单向链表,将其中的偶数值结点删除后输出。
在Python中,你可以使用`ListNode`类代表链表节点,然后编写一个函数来实现这个功能。下面是一个简单的示例:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def delete_even_numbers(head):
if head is None or head.val == -1:
return None
current = head
prev = None
while current is not None and current.val != -1:
if current.val % 2 != 0:
# 如果当前值是奇数,将其添加到结果链表中
if prev is not None:
prev.next = current
else:
# 如果是头节点,直接指向当前节点
new_head = current
prev = current
else:
# 如果是偶数,跳过并更新prev和current指针
current = current.next
return new_head
# 示例:
# 创建链表 [1, 2, 3, 4, 5, -1]
head = ListNode(1)
head.next = ListNode(2)
head.next.next = ListNode(3)
head.next.next.next = ListNode(4)
head.next.next.next.next = ListNode(5)
head.next.next.next.next.next = ListNode(-1)
new_head = delete_even_numbers(head)
while new_head:
print(new_head.val)
new_head = new_head.next
```
这个函数会遍历链表,当遇到一个偶数值时,它会跳过该节点。当找到一个奇数值或到达链表末尾时,它会将之前遇到的所有奇数节点连接起来作为新的链表返回。
阅读全文