方法一:

  1. /**
  2. * Definition for singly-linked list.
  3. * type ListNode struct {
  4. * Val int
  5. * Next *ListNode
  6. * }
  7. */
  8. func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
  9. if l1 == nil {
  10. return l2
  11. }
  12. if l2 == nil {
  13. return l1
  14. }
  15. //建立一个虚拟的头节点
  16. dummyNode := &ListNode{}
  17. //循环动态维护
  18. cur := dummyNode
  19. val := 0
  20. carry := 0
  21. l1Cur, l2Cur := l1, l2
  22. for l1Cur != nil || l2Cur != nil {
  23. val = 0
  24. if l1Cur != nil {
  25. val += l1Cur.Val
  26. l1Cur = l1Cur.Next
  27. }
  28. if l2Cur != nil {
  29. val += l2Cur.Val
  30. l2Cur = l2Cur.Next
  31. }
  32. cur.Next = &ListNode{
  33. Val: (val + carry) % 10,
  34. }
  35. cur = cur.Next
  36. carry = (val + carry) / 10
  37. }
  38. //最后可能有进位
  39. if carry != 0 {
  40. cur.Next = &ListNode{
  41. Val: carry,
  42. }
  43. }
  44. return dummyNode.Next
  45. }