C++ 中的加一連結串列
假設我們有一個以非空數字單鏈表形式表示的非負整數,現在我們必須將該整數加一。我們可以假設該整數不包含任何前導零,除了數字 0 本身。在連結串列中,最高有效數字位於連結串列的頭部。
因此,如果輸入類似於 [1,2,3],則輸出將為 [1,2,4]
要解決此問題,我們將按照以下步驟操作−
如果頭部為 null,則−
返回頭部
curr = 頭部
req = NULL
while curr 不為零,執行 −
如果 curr 的 val 不等於 9,則 −
req := curr
curr := curr 的下一個
如果 req 不為零,則 −
dummy = 新節點,值為 1
dummy 的下一個 := 頭部
while 頭部不為零,執行 −
頭部的 val := 0
頭部 := 頭部的下一個
返回 dummy
否則
req 的 val 加 1
req := req 的下一個
while req 不為零,執行 −
req 的 val := 0
req := req 的下一個
返回頭部
示例
讓我們看看以下實施,以便更好地理解。
#include <bits/stdc++.h>
using namespace std;
class ListNode{
public:
int val;
ListNode *next;
ListNode(int data){
val = data;
next = NULL;
}
};
ListNode *make_list(vector<int< v){
ListNode *head = new ListNode(v[0]);
for(int i = 1; i<v.size(); i++){
ListNode *ptr = head;
while(ptr->next != NULL){
ptr = ptr->next;
}
ptr->next = new ListNode(v[i]);
}
return head;
}
void print_list(ListNode *head){
ListNode *ptr = head;
cout << "[";
while(ptr){
cout << ptr->val << ", ";
ptr = ptr->next;
}
cout << "]" << endl;
}
class Solution {
public:
ListNode* plusOne(ListNode* head) {
if (!head)
return head;
ListNode* curr = head;
ListNode* req = NULL;
while (curr) {
if (curr->val != 9) {
req = curr;
}
curr = curr->next;
}
if (!req) {
ListNode* dummy = new ListNode(1);
dummy->next = head;
while (head) {
head->val = 0;
head = head->next;
}
return dummy;
}
else {
req->val++;
req = req->next;
while (req) {
req->val = 0;
req = req->next;
}
return head;
}
}
};
main(){
Solution ob;
vector<int< v = {1,4,5};
ListNode *head = make_list(v);
print_list(ob.plusOne(head));
}輸入
{1,4,5}輸出
[1, 4, 6, ]
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP