// test.cpp : 定义控制台应用程序的入口点。 //输入一个链表,反转链表后,输出链表的所有元素。 #include "stdafx.h" #include <iostream> using namespace std; struct ListNode { int val; struct ListNode* next; ListNode(int n) { val = n; } }; int main() { ListNode n1(1); ListNode n2(2); ListNode n3(3); ListNode n4(4); ListNode n5(5); ListNode n6(6); n1.next = &n2; n2.next = &n3; n3.next = &n4; n4.next = &n5; n5.next = &n6; ListNode* p = &n1; ListNode* q = p->next; ListNode* r=NULL; p->next = NULL; while (q != NULL) { r = q->next; q->next = p; p = q; q = r; } while (p) { cout << p->val<<' '; p = p->next; } system("pause"); return 0; }
编译出错:引发了异常: 读取访问权限冲突, p 是 0xCCCCCCCC。(p为野指针)
解决办法:
方法1、修改struct ListNode{ }中的next指针赋值为NULL,如下:
struct ListNode { int val; struct ListNode* next=NULL; ListNode(int n) { val = n; } };
方法2:在main函数中的赋值语句中再加一句:
n6.next = NULL;