一般而言:.
用于类的实例,而->
用于类的指针。
Leetcode里面的链表节点一般定义如下,我们在里面加入一个print()
方法,打印所有的节点值:
struct ListNode {
int val;
ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
void print() {
printf("%d -> ",this->val);
if(this->next !=nullptr){
this->next->print();
}
else {
printf("\n");
}
}
};
用递归实现的翻转链表如下:
ListNode* reverseList(ListNode* head) {
if(head == nullptr || head->next == nullptr) return head;
ListNode *reverse = reverseList(head->next);
head->next->next = head;
head->next = nullptr;
return reverse;
}
然后我们在main()
函数写测试:
int main() {
ListNode n1(1);
ListNode n2(3);
ListNode n3(5);
ListNode m1(6);
ListNode m2(4);
ListNode m3(2);
n1.next = &n2;
n2.next = &n3;
m1.next = &m2;
m2.next = &m3;
ListNode* rr = reverseList(&n1);
rr->print();
n1.print();
m1.print();
return 0;
}
这里我们可以看到:rr
调用方法是rr->print()
而n1
和m1
调用方法是m/n1.print()
。