本题目要求实现下面三个函数,实现如下功能: 输入若干个正整数,以-1结束,采取向链表中添加节点的方式来建立一个单向链表。 遍历并输出这个单向链表。
时间: 2023-05-02 21:01:16 浏览: 206
题目要求实现下面三个函数,实现如下功能:输入若干个正整数,以-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微结束标志),建立两个已按升序排列的单向链表,头指针分别为list1、list2,把两个链表拼成一个链表,并输出新链表信息。要求自定义函数,实现将两个链表拼成一个链表,并返回拼组后的新链表。试编写相应程序。
以下是一个简单的实现:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def construct_linked_list():
head = None
while True:
val = int(input())
if val == -1:
break
node = ListNode(val)
if head is None:
head = node
else:
curr = head
while curr.next is not None:
curr = curr.next
curr.next = node
return head
def merge_two_lists(l1: ListNode, l2: ListNode) -> ListNode:
dummy = ListNode(0)
tail = dummy
while l1 is not None and l2 is not None:
if l1.val < l2.val:
tail.next = l1
l1 = l1.next
else:
tail.next = l2
l2 = l2.next
tail = tail.next
if l1 is not None:
tail.next = l1
else:
tail.next = l2
return dummy.next
if __name__ == '__main__':
print("请输入第一个链表的元素(已按升序排列),以-1结束:")
list1 = construct_linked_list()
print("请输入第二个链表的元素(已按升序排列),以-1结束:")
list2 = construct_linked_list()
merged_list = merge_two_lists(list1, list2)
print("合并后的链表为:")
while merged_list is not None:
print(merged_list.val, end=" ")
merged_list = merged_list.next
```
这里定义了一个 `ListNode` 类表示链表中的每个节点。`construct_linked_list` 函数用于构造链表,它会读入若干个正整数并将它们添加到链表中,直到读入 `-1` 为止。`merge_two_lists` 函数用于将两个已按升序排列的链表 `l1` 和 `l2` 拼接成一个新链表,它的返回值是拼接后的新链表的头节点。在 `main` 函数中,我们先读入两个链表,然后调用 `merge_two_lists` 函数将它们拼接起来,最后输出拼接后的链表。
阅读全文