c语言用单链表实现讲一个二进制加1的操作
时间: 2023-05-17 22:03:38 浏览: 80
以下是用单链表实现二进制加1的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
ListNode* addOne(ListNode* head) {
ListNode *p = head, *lastNotNine = NULL;
while (p) {
if (p->val != 9) {
lastNotNine = p;
}
p = p->next;
}
if (lastNotNine == NULL) {
lastNotNine = (ListNode*)malloc(sizeof(ListNode));
lastNotNine->val = 0;
lastNotNine->next = head;
head = lastNotNine;
}
lastNotNine->val++;
p = lastNotNine->next;
while (p) {
p->val = 0;
p = p->next;
}
return head;
}
void printList(ListNode* head) {
while (head) {
printf("%d", head->val);
head = head->next;
}
printf("\n");
}
int main() {
ListNode *head = (ListNode*)malloc(sizeof(ListNode));
head->val = 1;
head->next = (ListNode*)malloc(sizeof(ListNode));
head->next->val = 0;
head->next->next = (ListNode*)malloc(sizeof(ListNode));
head->next->next->val = 0;
head->next->next->next = NULL;
printList(head);
head = addOne(head);
printList(head);
return 0;
}
```
这个程序中,我们定义了一个链表节点结构体 ListNode,包含一个整数 val 和一个指向下一个节点的指针 next。addOne 函数接受一个链表头指针 head,返回一个新的链表头指针,表示加1后的结果。我们首先遍历链表,找到最后一个不是9的节点 lastNotNine,如果找不到,说明所有节点都是9,需要在头部插入一个新的节点。然后将 lastNotNine 的值加1,将 lastNotNine 后面的所有节点的值都设为0。最后返回 head。
printList 函数用于打印链表的值,方便测试。
运行结果:
```
100
101
```
阅读全文