用尾插法建立单链表,当输入元素为0时停止并输出链表
时间: 2024-05-08 16:17:27 浏览: 76
以下是Python的代码实现:
```python
class ListNode:
def __init__(self, val):
self.val = val
self.next = None
# 尾插法建立链表
head = ListNode(None)
tail = head
while True:
val = int(input())
if val == 0:
break
node = ListNode(val)
tail.next = node
tail = node
# 输出链表
node = head.next
while node:
print(node.val)
node = node.next
```
首先定义了一个`ListNode`类表示链表的节点,包含一个`val`属性表示节点的值,和一个`next`属性指向下一个节点。然后用`head`表示链表的头节点,初始时指向一个值为`None`的节点。用`tail`表示链表的尾节点,初始时指向`head`。每次输入一个元素,如果为0则停止循环,否则创建一个新的节点,并将其连接到链表的尾部,然后将`tail`指向这个新节点,继续循环输入。最后从链表的头节点开始,依次输出每个节点的值。
相关问题
C语言用尾插法建立单链表,当输入元素为0时停止并输出链表
的所有元素。
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
int main() {
Node *head = NULL;
Node *tail = NULL;
int num;
do {
scanf("%d", &num);
if (num == 0) {
break;
}
Node *node = (Node *)malloc(sizeof(Node));
node->data = num;
node->next = NULL;
if (tail == NULL) {
head = node;
tail = node;
} else {
tail->next = node;
tail = node;
}
} while (1);
Node *p = head;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
return 0;
}
```
输入:
```
1 2 3 4 5 6 0
```
输出:
```
1 2 3 4 5 6
```
尾插法建立单链表以输入9999截止C语言代码
尾插法建立单链表是一种常见的单链表操作方式,它指的是在链表的尾部进行插入操作。在C语言中,使用尾插法建立单链表通常涉及到以下步骤:定义链表结构体,创建链表头节点,然后循环接收用户输入的数据,每次输入一个数据后创建一个新节点,并将其插入到链表的尾部,直到输入特定的结束标志(比如9999)为止。
下面是使用尾插法建立单链表的C语言示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data; // 数据域
struct Node *next; // 指针域,指向下一个节点
} Node;
// 创建一个新节点
Node* createNode(int data) {
Node *newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("内存分配失败\n");
exit(1);
}
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 尾插法建立单链表
Node* createListByTailInsertion() {
Node *head = createNode(0); // 创建一个头节点,数据域不使用
Node *tail = head; // 尾指针,初始时指向头节点
int data;
while (1) {
scanf("%d", &data);
if (data == 9999) { // 输入9999时停止插入
break;
}
Node *newNode = createNode(data);
tail->next = newNode; // 将新节点插入到链表尾部
tail = newNode; // 更新尾指针
}
return head;
}
// 打印链表
void printList(Node *head) {
Node *current = head->next; // 跳过头节点
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
// 主函数
int main() {
printf("请输入数字,输入9999结束:\n");
Node *list = createListByTailInsertion();
printList(list);
// 释放链表内存
Node *current = list;
Node *temp;
while (current != NULL) {
temp = current;
current = current->next;
free(temp);
}
return 0;
}
```
这段代码首先定义了链表节点的结构体,然后通过`createNode`函数创建新节点。`createListByTailInsertion`函数实现了尾插法建立单链表的逻辑,当输入为9999时停止插入,并返回链表的头节点。`printList`函数用于打印链表中的数据。最后在`main`函数中,用户输入数据,程序输出链表,并在结束前释放了链表占用的内存。
阅读全文