关于leetcode链表添加程序说明

 
 

/**

 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
 
typedef struct ListNodep {
     int val;
     struct ListNodep *next;
 }ListNode;
 
 
ListNode* addTwoNumbers(ListNode* I1, ListNode* I2) {
    ListNode *rootp = NULL;
    ListNode *listp = NULL;
    int value = 0;
    int varin = 0;
    
    if(I1 == NULL && I2 == NULL) return rootp;
    
    listp = (ListNode *)malloc(sizeof(ListNode));
    rootp = listp;
    listp->val = 0;
    listp->next = NULL;
    
    while(I1 != NULL || I2 != NULL || varin!= 0){
        
        if(I1 == NULL && I2 != NULL)  value = I2->val + varin;
        
        if(I1 != NULL && I2 == NULL)  value = I1->val + varin;
        
        if(I2 != NULL && I1 != NULL)  value = I1->val + I2->val + varin;
        
        if(I1 == NULL && I2 == NULL)  value = varin;
                
        varin = 0;
        
        if(value >= 10){
            varin = value /10;
            value = value %10;
        }

        //此处需要注意,此处需要注意当当前链表已经为NULL后,他指向的空链表
        //不能够在往下操作了,需要直接在给当前指针为空链表
        if(I1 == NULL) I1 = NULL;
        else I1 = I1->next;
        
        if(I2 == NULL) I2 = NULL;
        else I2 = I2->next;
        
        
        listp->val = value;
        
        if(I1 != NULL || I2 != NULL || varin != 0){
            listp->next = (ListNode *)malloc(sizeof(ListNode));
            listp = listp->next;}
        else
        {
            listp->next = NULL;
        }
    }
    
    return rootp;
}


leetcode问题描述 : 

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8


//--------------------------------------------------------------------------------------------------------------------------------------------------------------------

这里的两个链表数据相加问题可不是那么简单,主要有一下几种情况

1、如果两个链表长度是一样的,就将链表中的元素相加输出即可


2、如果两个链表的长度不是一样的,就要短链表位的补齐,如果不是使用补齐的方法,就需要考虑在逻辑上消除这种现象

扫描二维码关注公众号,回复: 1122808 查看本文章


3、如果两个链表长度一样长,但是在最后一个元素相加出现了进位,那么就需要在最后一个链表上在添加一个链表,

所以其实这个问题还是蛮复杂的


下面是在c中运行时的代码 : 

// list.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#define ListDeep 1
typedef struct NODE{
NODE *P;
int data;
}ListTypr;
ListTypr list1[ListDeep];
ListTypr list2[ListDeep];
//---------------------------------------------------------------
void initlist(ListTypr *I1 , ListTypr *I2 , int listdeep){
for(short i = 0; i < listdeep ; i++){
I1->data=5;
if(i == listdeep-1) I1->P= NULL;
else I1->P= I1+1;
I1 = I1->P;
}
for(short i = 0; i < listdeep ; i++){
I2->data=5;
if(i == listdeep-1) I2->P= NULL;
else I2->P= I2+1;
I2 = I2->P;
}
}
ListTypr* addTwoNumbers(ListTypr* l1, ListTypr* l2) {
ListTypr *rootp = NULL;
ListTypr *listp = NULL;
int value = 0;
int varin = 0;
if(l1 == NULL && l2 == NULL) return rootp;
listp = (ListTypr *)malloc(sizeof(ListTypr));
listp->data = 0;
listp->P = NULL;
rootp = listp;
while(l1 != NULL || l2 != NULL || varin != 0){
if(l1 != NULL && l2 == NULL) value = l1->data + varin;
if(l1 == NULL && l2 != NULL) value = l2->data + varin;
if(l1 != NULL && l2 != NULL) value = l1->data + l2->data + varin;
if(l1 == NULL && l2 == NULL) {
value = varin;
varin = 0;
}
if(value >= 10){
varin = value / 10;
value = value % 10;
}
if(l1 == NULL) l1 = NULL;
else l1 = l1->P;
if(l2 == NULL) l2 = NULL;
else l2 = l2->P;
listp->data = value;
if(l1 != NULL || l2 != NULL || varin != 0){
listp->P = (ListTypr *)malloc(sizeof(ListTypr));
listp = listp->P;}
else{
listp->P = NULL;
}
}
return rootp;
}
int _tmain(int argc, _TCHAR* argv[])
{
short listdeep = ListDeep;
ListTypr * plistresult = NULL;
ListTypr * rep = NULL;
int resultmatrix[10];
short i = 0;
initlist(&list1[0] , &list2[0] , listdeep);
plistresult = addTwoNumbers(&list1[0] , &list2[0]);
while(plistresult != NULL){
resultmatrix[i] = plistresult->data;
plistresult = plistresult->P;
i = i + 1;
}
while(1);
return 0;
}



猜你喜欢

转载自blog.csdn.net/taiyangshenniao/article/details/53671508