c语言用单链表实现将一个二进制加1的操作
时间: 2023-05-17 12:04:15 浏览: 115
西工大c语言
可以使用以下代码实现:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
Node* addOne(Node* head) {
Node* p = head;
Node* lastNotNine = NULL;
// 从链表尾部开始遍历
while (p != NULL) {
if (p->data != 9) {
lastNotNine = p;
}
p = p->next;
}
// 如果链表中没有9,则直接在头部插入1
if (lastNotNine == NULL) {
Node* newHead = (Node*)malloc(sizeof(Node));
newHead->data = 1;
newHead->next = head;
return newHead;
}
// 将最后一个不是9的节点加1
lastNotNine->data++;
// 将后面的节点全部置为0
p = lastNotNine->next;
while (p != NULL) {
p->data = 0;
p = p->next;
}
return head;
}
void printList(Node* head) {
Node* p = head;
while (p != NULL) {
printf("%d", p->data);
p = p->next;
}
printf("\n");
}
int main() {
Node* head = (Node*)malloc(sizeof(Node));
head->data = 1;
head->next = NULL;
head = addOne(head);
printList(head);
return 0;
}
```
这个程序使用单链表来表示一个二进制数,然后实现了将这个二进制数加1的操作。具体实现方法是从链表尾部开始遍历,找到最后一个不是9的节点,将其加1,然后将后面的节点全部置为0。如果链表中没有9,则直接在头部插入1。
阅读全文