비어 있지 않은 단일 연결 숫자 목록으로 표시된 음이 아닌 정수가 있다고 가정하고 이제 정수에 1을 더해야 합니다. 정수가 숫자 0 자체를 제외하고는 선행 0을 포함하지 않는다고 가정할 수 있습니다. 연결 목록에서 가장 중요한 숫자는 목록의 맨 앞에 있습니다.
따라서 입력이 [1,2,3]과 같으면 출력은 [1,2,4]
가 됩니다.이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
머리가 null이면 -
-
머리 반환
-
-
커 =머리
-
요청 =NULL
-
curr이 0이 아닌 동안 수행 -
-
curr의 val이 9와 같지 않으면 -
-
요청:=현재
-
-
curr :=curr의 다음
-
-
not req가 0이 아닌 경우 -
-
더미 =값이 1인 새 노드
-
더미의 다음 :=머리
-
헤드가 0이 아닌 동안 수행 -
-
머리 값 :=0
-
head :=머리 다음
-
-
더미 반환
-
-
그렇지 않으면
-
req의 값을 1 증가
-
req :=req의 다음
-
req가 0이 아닌 동안 수행 -
-
요구 값 :=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, ]