题解 | #链表相加(二)#
链表相加(二)
https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b
/**
* @author Lu.F
* @version 1.0
* @date 2022/10/8 21:44
*/
public class Solution3 {
/**
*
* @param head1 ListNode类
* @param head2 ListNode类
* @return ListNode类
*/
public ListNode addInList (ListNode head1, ListNode head2) {
// write code here
// 判断是否为空
if (head1 == null){
return head2;
}
if (head2 == null){
return head1;
}
// 反转链表
ListNode pHead1 = reverseList(head1);
ListNode pHead2 = reverseList(head2);
ListNode pHead = new ListNode(-1);
ListNode head = pHead;
// 记录进位
int temp = 0;
while (pHead1 != null || pHead2 != null){
// 记录进位(加数+加数+进位)
int val = temp;
if (pHead1 != null){
val += pHead1.val;
pHead1 = pHead1.next;
}
if (pHead2 != null){
val += pHead2.val;
pHead2 = pHead2.next;
}
// 获取进位
temp = val/10;
// 获取个位
pHead.next = new ListNode(val%10);
// 继续指向下个
pHead = pHead.next;
}
// 如果进位大于0则增加一个
if (temp > 0){
pHead.next = new ListNode(temp);
}
// 将结果逆转返回最终答案
return reverseList(head.next);
}
/**
* 反转链表
* @param head
* @return
*/
private ListNode reverseList(ListNode head){
// 判断非空
if (head == null){
return null;
}
// 记录当前指针
ListNode cur = head;
// 记录前一个指针
ListNode node = null;
while (cur != null){
ListNode tail = cur.next;
cur.next = node;
node = cur;
cur = tail;
}
return node;
}
}

查看9道真题和解析