7.奇数值结点链表:输入若干个正整数(输入-1为结束标志)建立一个单向链表,头指针为L,将链表L中奇数值的结点重新组成一个新的链表NEW,并输出新建链表的信息。试编写相应C语言程序。
时间: 2024-12-23 16:15:35 浏览: 57
在C语言中,我们可以编写一个程序来实现这个功能。首先,我们需要创建一个结构体表示链表节点,然后定义一个函数来插入节点,以及另一个函数用于查找和移除奇数值节点。以下是简单的流程描述:
1. 定义链表节点结构体:
```c
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
```
2. 初始化链表头指针:
```c
ListNode* L = NULL; // 初始化为空
```
3. 输入循环,接收并处理数字:
```c
while (1) {
int num;
scanf("%d", &num);
if (num == -1)
break;
// 插入节点到链表
ListNode* newNode = malloc(sizeof(ListNode));
newNode->val = num;
newNode->next = L;
L = newNode;
}
```
4. 创建新的奇数链表:
```c
ListNode* newHead = NULL;
ListNode* current = L;
while (current != NULL) {
if (current->val % 2 != 0) {
if (newHead == NULL) {
newHead = current;
} else {
ListNode* temp = newHead;
while (temp->next != NULL && temp->next->val % 2 == 0) {
temp = temp->next;
}
temp->next = current;
}
}
current = current->next;
}
```
5. 输出新链表的信息:
```c
if (newHead != NULL) {
printf("新链表信息: ");
ListNode* temp = newHead;
while (temp != NULL) {
printf("%d -> ", temp->val);
temp = temp->next;
}
printf("NULL\n");
} else {
printf("没有奇数值节点。\n");
}
```
6. 最后记得释放不再需要的内存:
```c
while (L != NULL) {
ListNode* temp = L;
L = L->next;
free(temp);
}
```
阅读全文
相关推荐


















