【发布时间】:2015-07-18 12:12:28
【问题描述】:
我正在尝试开发一种方法来解决链表问题,而不必以任何特殊方式关心头节点,即在链表问题中,我们通常在开始处理下一个节点之前单独处理头指针.
我找到了一种方法:使用一个虚拟节点,让实际的链表从 dummy.next 开始。
我正在尝试使用这种方式解决problem:
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode dummy = ListNode(0);
ListNode * temp = dummy.next;
int carry =0;
while(l1!=NULL && l2!=NULL)
{
int x = (l1->val + l2->val + carry)%10;
temp = new ListNode(x);
carry = (l1->val + l2->val + carry)/10;
temp = temp->next;
l1 = l1->next;
l2 = l2->next;
}
ListNode * p = (l1!=NULL)?l1:l2;
while(p!=NULL)
{
int x = (p->val+carry)%10;
temp = new ListNode(x);
carry = (p->val+carry)/10;
temp = temp->next;
p = p->next;
}
if(carry==1) temp = new ListNode(1);
return dummy.next;
}
int main()
{
ListNode * l1 = new ListNode(0), *l2 = new ListNode(0);
ListNode * l3 = addTwoNumbers(l1,l2);
}
在这个问题中,我尝试不单独初始化头节点。显然,代码并没有按照我的意愿去做,但是我尝试了这种方式,现在,我不知道如何继续使用这种方法。
即使用dummy节点,这样就不需要单独处理新创建的链表的头节点了。
有什么方法可以使用这种方法来解决问题?
【问题讨论】:
-
使用
std::list,与链表问题告别。 -
@JonathanPotter thx 但不能这样做。必须解决这个问题:)。
-
使用虚拟节点似乎不是一个合理的想法。它只是推动你试图进一步解决的问题。不管这个问题是什么。
标签: c++ algorithm pointers linked-list