c语言用单链表实现讲一个二进制加1的操作
时间: 2023-05-17 20:03:45 浏览: 49
可以使用以下代码实现:
```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 != NULL) {
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 != NULL) {
p->val = 0;
p = p->next;
}
return head;
}
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;
head = addOne(head);
ListNode *p = head;
while (p != NULL) {
printf("%d", p->val);
p = p->next;
}
printf("\n");
return 0;
}
```
这个程序使用单链表来表示一个二进制数,每个节点的值只能是0或1。addOne函数实现了将这个二进制数加1的操作。