【题目描述】 给你一个字符串,其中有若干数字,利用链表相关知识从头开始将数字按顺序移动至字符串末端。如 19js98ss 移动后是 jsss1998 【样例输入】 19js98ss 【样例输出】 jsss1998 c++
时间: 2024-03-07 12:48:14 浏览: 181
好的,以下是使用C++实现将字符串中的数字按顺序移动至字符串末端的代码:
```c++
#include <iostream>
#include <string>
using namespace std;
struct ListNode {
char val;
ListNode *next;
ListNode(char x) : val(x), next(NULL) {}
};
ListNode* moveNumbers(string s) {
ListNode *dummy = new ListNode(0);
ListNode *tail = dummy;
for (int i = 0; i < s.size(); i++) {
if (isdigit(s[i])) {
ListNode *node = new ListNode(s[i]);
tail->next = node;
tail = node;
}
}
ListNode *curr = dummy->next;
ListNode *prev = dummy;
while (curr) {
if (isdigit(curr->val)) {
prev->next = curr->next;
tail->next = curr;
tail = curr;
curr = prev->next;
tail->next = NULL;
} else {
prev = curr;
curr = curr->next;
}
}
return dummy->next;
}
int main() {
string s;
cin >> s;
ListNode *result = moveNumbers(s);
while (result) {
cout << result->val;
result = result->next;
}
cout << endl;
return 0;
}
```
我们同样定义了一个链表节点结构体ListNode,其中val表示节点的值,next表示指向下一个节点的指针。moveNumbers函数接受一个字符串s,返回移动数字后的链表头节点。
我们首先遍历字符串s,找到其中的数字字符,然后将它们按顺序连接成一个链表。然后遍历链表,对于每个节点curr,我们判断它是否是数字字符。如果是数字字符,就将它从原链表中删除,并加入到链表尾部。最后返回链表头节点即可。
在main函数中,我们首先读取输入的字符串,然后调用moveNumbers函数移动字符串中的数字。最后输出移动后的字符串。
希望这个C++实现能够解答你的问题。
阅读全文