C语言反转链表scanf输入
时间: 2024-10-24 15:14:34 浏览: 28
在C语言中,反转链表通常涉及到两个步骤:遍历原链表并创建一个新的链表,新链表的节点顺序与原链表相反。当遇到需要输入的情况,比如使用`scanf`函数获取用户输入,可以按以下步骤操作:
1. 定义链表结构,包括头结点和每个节点的数据域以及指向下一个节点的指针。
```c
typedef struct ListNode {
int data;
struct ListNode* next;
} ListNode;
```
2. 创建一个函数用于读取链表数据。这里假设用户会提供一个整数作为输入。你可以使用`scanf`配合链表节点进行输入,但需要注意链表的空指针处理。
```c
ListNode* readList(int n) {
ListNode *head = NULL, *temp = NULL;
for (int i = 0; i < n; i++) {
int input;
scanf("%d", &input);
ListNode *newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->data = input;
newNode->next = head;
if(head != NULL)
temp->next = newNode;
else
head = newNode;
temp = newNode;
}
return head;
}
```
3. 定义链表反转的函数,这个函数会接收输入生成的链表,并将其反转。
4. 使用迭代或递归的方式将当前节点的`next`指向前一个节点,直到遍历完整个链表。
```c
void reverseList(ListNode* head) {
ListNode* prev = NULL, *current = head, *next;
while (current != NULL) {
next = current->next;
current->next = prev;
prev = current;
current = next;
}
head = prev; // 新链表的头节点变为原来的尾节点
}
```
5. 最后,在主程序中,先调用`readList`函数得到用户输入的链表,然后调用`reverseList`函数反转它。
```c
int main() {
int n;
printf("Enter the number of nodes: ");
scanf("%d", &n);
ListNode* list = readList(n);
reverseList(list);
// 现在list就是反转后的链表
// ... 接下来处理链表,例如打印节点等
return 0;
}
```
阅读全文