先把链表进行反转,然后再相加
反转链表的步骤参考NC78
https://blog.nowcoder.net/n/31e6abf3dd5d4970a03f7a483ca8e0ab
相加的时候每一位上的值等于两个链表那位上的值相加再加上之前的进位%10
c++
class Solution { public: //反转链表 ListNode* ReverseList(ListNode* pHead) { ListNode* Pre = NULL; ListNode* Now = pHead; ListNode* Next = NULL; while(Now!=NULL) { Next = Now->next; Now->next = Pre; Pre = Now; Now = Next; } pHead = Pre; return pHead; } ListNode* addInList(ListNode* head1, ListNode* head2) { head1 = ReverseList(head1); head2 = ReverseList(head2); ListNode* res = new ListNode(0); ListNode* now = res; int d = 0;//存储进位 while(head1!=NULL||head2!=NULL) { int num = d; if(head1!= NULL){ num += head1->val; head1 = head1->next; } if(head2!= NULL){ num += head2->val; head2 = head2->next; } d = num/10; num = num%10; ListNode *t = new ListNode(num); now->next = t; now = now->next; cout<<now->val<<endl; } if(d!=0) { ListNode t(d); t.next = NULL; now ->next = &t; } else{ now ->next = NULL; } res = ReverseList(res->next); return res; } };
java
import java.util.*; public class Solution { public ListNode ReverseList(ListNode head) { ListNode Pre = null; ListNode Now = head; ListNode Next = null; while(Now != null){ Next = Now.next; Now.next = Pre; Pre = Now; Now = Next; } head = Pre; return head; } public ListNode addInList (ListNode head1, ListNode head2) { // write code here head1 = ReverseList(head1); head2 = ReverseList(head2); ListNode res = new ListNode(0); ListNode now = res; int d = 0;//存储进位 while(head1!=null||head2!=null) { int num = d; if(head1!= null){ num += head1.val; head1 = head1.next; } if(head2!= null){ num += head2.val; head2 = head2.next; } d = num/10; num = num%10; ListNode t = new ListNode(num); now.next = t; now = now.next; } if(d!=0) { ListNode t =new ListNode(d); t.next = null; now.next = t; } else{ now.next = null; } res = ReverseList(res.next); return res; } }
python
class Solution: def ReverseList(self, pHead): Pre = None Now = pHead Next = None while Now != None: Next = Now.next Now.next = Pre Pre = Now Now = Next pHead = Pre return pHead def addInList(self , head1 , head2 ): head1 = self.ReverseList(head1) head2 = self.ReverseList(head2) res = ListNode(0) now = res d = 0 while head1!=None or head2!=None: num = d if head1!= None: num = num + head1.val head1 = head1.next if head2!= None: num = num+head2.val head2 = head2.next d = num//10 num = num%10 t = ListNode(num) now.next = t now = now.next if d!=0: t = ListNode(d) t.next = None now.next = t else: now.next = None res = self.ReverseList(res.next) return res