小技巧:
对于链表问题,创建头节点时不知道合适的节点值,因此通常需要先初始化一个预先指针(伪头节点) pre,该指针的下一个节点指向真正的头结点head。使用预先指针的目的在于链表初始化时无可用节点值。
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {
}
};
ListNode* pre = new ListNode(0); //0为预先指针的值,pre->next指向head
ListNode* current = pre; //移动current
return pre->next; //返回真实头节点
例子:
1、算法题:2. 两数相加
2、面试题25. 合并两个排序的链表
总结:
1、使用伪头节点(预先指针)可以在不确定链表头节点值的情况下初始化,从而可以进行之后的建立链表过程,但需要返回pre->next
。