查看: 1792| 回复: 1
跳转到指定楼层
上一主题 下一主题
收起左侧

Google : Link addition

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
add 2 link lists without reverse in O(n) n constant space

eg
1-2-3 + 1-7
1-4-0

上一篇:Google : Find intersected circles
下一篇:Google : Find the number of duplicated number in sorted array
🔗
 楼主| wwwyhx 2011-7-27 14:58:27 | 只看该作者
全局:
当然是用递归,不过程序写出来需要一些小技巧地:

  1. struct NODE
  2. {
  3.         int nVal;
  4.         NODE* pNext;

  5.         NODE(int n) : nVal(n), pNext(NULL) {}
  6. };

  7. int GetLen(NODE* pHead)
  8. {
  9.         int nRet = 0;

  10.         while (NULL != pHead)
  11.         {
  12.                 nRet++;
  13.                 pHead = pHead->pNext;
  14.         }

  15.         return nRet;
  16. }

  17. NODE* CalcAdd(NODE* p1, int n, NODE* p2, int m)
  18. {
  19.         if (0 == n || 0 == m)
  20.                 return NULL;

  21.         NODE* pNode = NULL;
  22.         NODE* pRet = NULL;

  23.         if (m != n)
  24.         {
  25.                 if (n > m)
  26.                 {
  27.                         pRet = CalcAdd(p1->pNext, n-1, p2, m);
  28.                         pNode = new NODE(p1->nVal);
  29.                 }
  30.                 else
  31.                 {
  32.                         pRet = CalcAdd(p1, n, p2->pNext, m-1);
  33.                         pNode = new NODE(p2->nVal);
  34.                 }
  35.         }
  36.         else
  37.         {
  38.                 pRet = CalcAdd(p1->pNext, n-1, p2->pNext, m-1);
  39.                 pNode = new NODE(p1->nVal + p2->nVal);
  40.         }

  41.         if (pRet != NULL && pRet->nVal >= 10)
  42.         {
  43.                 pRet->nVal = pRet->nVal%10;
  44.                 pNode->nVal++;
  45.         }
  46.         pNode->pNext = pRet;

  47.         return pNode;
  48. }

  49. NODE* AddLnk(NODE* p1, NODE* p2)
  50. {
  51.         assert(p1 && p2);

  52.         NODE* pHead = CalcAdd(p1, GetLen(p1), p2, GetLen(p2));
  53.         if (pHead->nVal >= 10)
  54.         {
  55.                 NODE* pTmp = pHead;
  56.                 pHead = new NODE(1);
  57.                 pTmp->nVal = pTmp->nVal%10;
  58.                 pHead->pNext = pTmp;
  59.         }

  60.         return pHead;
  61. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表