c*****y 发帖数: 90 | 1 Given an unsigned integer 1345, the program constructs a linked list of
1->3->4->5.
有人先得出一个linked list: 5->4->3->1,然后reverse得到1->3->4->5. 我想直接得到
1->3->4->5,非递归很容易,用递归如何做?我迷惑在跳出递归的那步如何写?if(num
/10==0)
我的部分code如下,有疑问的地方用问号表示了。
Node * ConstructLinkedList(in num, Node *head)
{
if(num==0)
{
head=new Node(num, NULL);
return head;
}
if(num/10=0)
{
head->data=num;
head->next=????
}
else
{
head=new Node();
head->data=num%10;
head=ConstructLinkedL |
c*********n 发帖数: 1057 | 2 不用单独处理if(num/10=0)吧,不然你1004怎么弄呢?
我觉得可以这样:
得到
num
if(head == NULL){
else
return head;
newnode = new Node();
newnode->data = num%10;
newnode->next=head;//insert into the head of the list
ConstructLinkedList(num/10,newnode);
【在 c*****y 的大作中提到】 : Given an unsigned integer 1345, the program constructs a linked list of : 1->3->4->5. : 有人先得出一个linked list: 5->4->3->1,然后reverse得到1->3->4->5. 我想直接得到 : 1->3->4->5,非递归很容易,用递归如何做?我迷惑在跳出递归的那步如何写?if(num : /10==0) : 我的部分code如下,有疑问的地方用问号表示了。 : Node * ConstructLinkedList(in num, Node *head) : { : if(num==0) : {
|
c*****y 发帖数: 90 | 3 1004%10再/10就可以得到4、0、0、1呀。不单独处理if(num/10=0),我觉得就不会知道
何时跳出
递归,例如在1004这个例子中,你就不知道在1这个数字处要跳出递归。
【在 c*********n 的大作中提到】 : 不用单独处理if(num/10=0)吧,不然你1004怎么弄呢? : 我觉得可以这样: : : 得到 : num : if(head == NULL){ : else : return head; : newnode = new Node(); : newnode->data = num%10;
|
c*********n 发帖数: 1057 | 4 当前数字是1的时候list里面是0->0->4->NULL对吧
然后在执行一次,把1加到head,list变成:1->0->0->4->null
然后num变成0,在调用方法,发现num==0就退出了啊
【在 c*****y 的大作中提到】 : 1004%10再/10就可以得到4、0、0、1呀。不单独处理if(num/10=0),我觉得就不会知道 : 何时跳出 : 递归,例如在1004这个例子中,你就不知道在1这个数字处要跳出递归。
|
c*****y 发帖数: 90 | 5 我开始也是这样想的,这样的话只需考虑if(num==0) return head就可以了,但后来我
想如果num本来就等于0呢,那么你就得创建一个data为0的linked list node。这样就
不对了.
【在 c*********n 的大作中提到】 : 当前数字是1的时候list里面是0->0->4->NULL对吧 : 然后在执行一次,把1加到head,list变成:1->0->0->4->null : 然后num变成0,在调用方法,发现num==0就退出了啊
|
c*********n 发帖数: 1057 | 6 你看我的回帖,num=0的时候判断过了
我直接在你的代码上改的
【在 c*****y 的大作中提到】 : 我开始也是这样想的,这样的话只需考虑if(num==0) return head就可以了,但后来我 : 想如果num本来就等于0呢,那么你就得创建一个data为0的linked list node。这样就 : 不对了.
|
c*****y 发帖数: 90 | 7 谢谢!这样就没问题了,我没想到在num=0的时候判断head来区分。
【在 c*********n 的大作中提到】 : 你看我的回帖,num=0的时候判断过了 : 我直接在你的代码上改的
|
g*******y 发帖数: 1930 | 8 可以判断i/=10之后,如果i是0了,就不继续递归了。
不管i是不是0,i%10是肯定会成为一个节点的。
如果输入是0,那么就输出一个单节点就结束了
如果输入不是0,最后i变成0以后也就结束了。
pair construct(int i){
Node *cur = new Node;
cur->data = i%10;
cur->next = 0;
i/=10;
if(i){
pair r = construct(i);
r->second->next = cur;
return make_pair(r->first,cur);
}else{
return make_pair(cur,cur);
}
} |
o********r 发帖数: 79 | 9 我写了下。
node* ConstructLinedList(int num, node* head)
{
if ((num==0)&&head)
return head;
node* newhead = new node();
newhead->value = num%10;
newhead->next = head;
head = ConstructLinedList(num/10, newhead);
}
得到
num
【在 c*****y 的大作中提到】 : Given an unsigned integer 1345, the program constructs a linked list of : 1->3->4->5. : 有人先得出一个linked list: 5->4->3->1,然后reverse得到1->3->4->5. 我想直接得到 : 1->3->4->5,非递归很容易,用递归如何做?我迷惑在跳出递归的那步如何写?if(num : /10==0) : 我的部分code如下,有疑问的地方用问号表示了。 : Node * ConstructLinkedList(in num, Node *head) : { : if(num==0) : {
|
c*****y 发帖数: 90 | 10 谢谢大家。再问个递归的方法,如何reverse doubly linked list? |
c*****y 发帖数: 90 | 11 Reverse a doubly linked list.
Node *RevDList(Node *head)
{
if (head==NULL) return head;
Node *temp = head->Next;
head->Next = head->Prev;
head->Prev = temp;
if (!temp) return head;
return RevDList(temp);
} |