Plus One Linked List

Given a non-negative integer represented as non-empty a singly linked list of digits, plus one to the integer.

You may assume the integer do not contain any leading zero, except the number 0 itself.

The digits are stored such that the most significant digit is at the head of the list.

Example:

Input:
1->2->3

Output:
1->2->4


 1 /**
 2  * Definition for singly-linked list.
 3  * public class ListNode {
 4  *     int val;
 5  *     ListNode next;
 6  *     ListNode(int x) { val = x; }
 7  * }
 8  */
 9 public class Solution {
10     public ListNode plusOne(ListNode head) {
11         List<Integer> temp = new ArrayList<Integer>();
12         
13         ListNode move = head;
14         while(move != null) {
15             temp.add(move.val);
16             move = move.next;
17         }
18         
19         int carry = 1;
20         ListNode last = new ListNode(-1);
21         for(int i = temp.size() - 1; i >= 0; i--) {
22             int total = carry + temp.get(i);
23             last.val = total % 10;
24             carry = total / 10;
25             
26             ListNode pre = new ListNode(-1);
27             pre.next = last;
28             last = pre;
29         }
30         
31         if (carry == 1) {
32             last.val = 1;
33             return last;
34         } else {
35             return last.next;
36         }
37     }
38 }

 

转载于:https://www.cnblogs.com/amazingzoe/p/6410454.html

链表反转是一道经典的算法问题,可以使用迭代或递归两种方法来实现。以下是使用迭代方法实现 C++ 链表反转的示例代码: ```cpp #include <iostream> using namespace std; struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; class Solution { public: ListNode* reverseList(ListNode* head) { ListNode* prev = NULL; ListNode* curr = head; while (curr != NULL) { ListNode* nextTemp = curr->next; curr->next = prev; prev = curr; curr = nextTemp; } return prev; } }; int main() { ListNode* head = new ListNode(1); head->next = new ListNode(2); head->next->next = new ListNode(3); head->next->next->next = new ListNode(4); Solution solution; ListNode* newHead = solution.reverseList(head); while (newHead != NULL) { cout << newHead->val << " "; newHead = newHead->next; } return 0; } ``` 在这个示例代码中,我们定义了一个 `ListNode` 结构体来表示链表节点,它包含一个整数 `val` 和指向下一个节点的指针 `next`。然后我们使用迭代方法实现了 `reverseList` 函数,该函数接受一个链表头指针 `head`,并返回一个新的链表头指针,该链表是输入链表的反转。 在 `reverseList` 函数中,我们定义了两个指针 `prev` 和 `curr`,分别指向当前节点的前一个节点和当前节点。然后我们使用一个 `while` 循环遍历整个链表,每次将当前节点的 `next` 指针指向前一个节点 `prev`,然后将 `prev` 指针指向当前节点 `curr`,将 `curr` 指针指向下一个节点 `nextTemp`。最后返回 `prev` 指针,它指向了反转后的链表头节点。 在 `main` 函数中,我们创建了一个包含四个节点的链表,并将其传递给 `reverseList` 函数进行反转。最后我们遍历反转后的链表并输出结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值