1、单链表建立
数据结构教材中,建立单链表使用的是倒序插入的方法。且不论方法,这里主要的问题对于单个节点是如何建立的。如果节点的数据结构如下:
为节点分配内存空间时,尽量分配在堆上。如果使用ListNode temp(x);这样的语句,可能由于局部变量的关系,当在块外使用时出现访问错误。struct ListNode{ int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} };
2、单链表倒置
最初的代码:
当p3指向NULL时,p3=p3->next会出现错误。为了避免这个低级的问题,修改如下:ListNode *reverseList(ListNode *l) { if(l == NULL || l->next == NULL) return l; ListNode *p1 = l, *p2 = p1->next, *p3 = p2->next; p1->next = NULL; while(p2) { //p3 = p2->next; p2->next = p1; p1 = p2; p2 = p3; p3 = p3->next; } return p1; }
这样p3最多指向NULL,而不会尝试去寻找NULL->next。ListNode *reverseList(ListNode *l) { if(l == NULL || l->next == NULL) return l; ListNode *p1 = l, *p2 = p1->next, *p3 = p2->next; p1->next = NULL; while(p2) { p3 = p2->next; p2->next = p1; p1 = p2; p2 = p3; } return p1; }