链表相关题目总结
Posted ccpang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表相关题目总结相关的知识,希望对你有一定的参考价值。
一、两数相加:
由于是刷的第一题,先写下:
本题是两个链表相加,方法是生成一个新的链表(其实是一个节点不断指向下一个节点,这样依次连起来的)去存储这个两个的和。
首先生成一个新的链表h,h是头指针;然后再让指针t指向h。
新建私有方法,该方法的作用是返回链表的有效数据,并让链表指向后继节点。即p好p->next指向相同的地址。
然后建立一个进位标志carry,让sum = x + y + carry:,将sum %10作为新节点node的初始值。让node和*t指向相同的地址,记住*t是t解引用,t指向的值是h,所以就是h和node指向相同的地址。
然后让t指向node->next的地址。
1 class Solution 2 3 public: 4 ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) 5 ListNode* h = NULL,**t = &h; //t指向h,h指向NULL 6 int x = 0,y = 0,carry = 0,sum = 0; 7 while(l1 != NULL || l2 != NULL) 8 x = getValueAndMoveNext(l1); 9 y = getValueAndMoveNext(l2); 10 sum = x + y + carry; 11 ListNode* node = new ListNode(sum%10); 12 *t = node; //h和node指向同一个地址 13 t = &node->next; //node->next是一个指针,它取指针的地址给t 14 carry = sum /10; 15 16 if(carry > 0) 17 ListNode* node = new ListNode(carry % 10); 18 *t = node; 19 20 return h; 21 22 private: 23 int getValueAndMoveNext(ListNode* &l) //l是一个ListNOde指针的引用 24 int v = 0; 25 if(l != NULL) 26 v = l->val; 27 l = l->next; 28 29 30 return v; 31 32 33 ;
以上是关于链表相关题目总结的主要内容,如果未能解决你的问题,请参考以下文章