adding two linked lists efficiently in C

前端 未结 2 1221
天命终不由人
天命终不由人 2021-02-09 09:21

I have two linked lists representing the digits of decimal numbers in order from most- to least-significant. for eg 4->7->9->6 and 5->7 The

2条回答
  •  独厮守ぢ
    2021-02-09 10:02

    Two passes, no stack:

    • Get the length of the two lists.

    • Create a solution list with one node. Initialize the value of this node to zero. This will hold the carry digit. Set a list pointer (call it the carry pointer) to the location of this node. Set a list pointer (call it the end pointer) to the location of this node.

    • Starting with the longer list, for each excess node, link a new node to the end pointer and assign it the value of the excess node. Set the end pointer to this new node. If the value is less than 9, set the carry pointer to the new node.

    • Now we're left with both list pointers having the same number of nodes in each.

    • While the lists are not empty...

      • Link a new node to the end pointer and advance the end pointer to this node.

      • Get the values from each list and advance each list pointer to the next node.

      • Add the two values together.

        1. If value is greater than nine, set the value to value mod 10, increment the value held in the carry pointer's node, move the carry pointer to the next node. If carry pointer's value is nine, set to zero and go to next node.

        2. If value is nine. Set it. Do nothing else.

        3. If value is less than nine. Set it. Set carry pointer to current node.

    • When you're done with both lists, check if the solution pointer's node value is zero. If it is, set the solution pointer to the next node, deleting the unneeded extra digit.

提交回复
热议问题