单链表的反转(C++)

链表的反转

  • 基本思想:

     用三个指针,其中一个指针p指向头结点,q为p的下一个结点。通过判断q是否为空,实现循环,在每一次循环中,引入新的指针r,将q指针的下一个结点设为p,并跟新指针q和r。

  • C++完整代码如下:

#include<iostream>
using namespace std;
struct ListNode
{
int val;
ListNode *next;
ListNode(int x):val(x),next(NULL){}
};
ListNode *help(ListNode *a)
{
ListNode *p = a;
ListNode *q;
ListNode *r;
q = p->next;
p->next = NULL;
while (q)
{
r = q->next;
q->next = p;
p = q;
q = r;
}
return p;
}
int main()
{
int n;
ListNode *a=new ListNode(NULL);
ListNode *pa = a;
ListNode *result;
cin >> n;
while (n--)
{
int temp;
cin >> temp;
pa->next = new ListNode(temp);
pa = pa->next;
}
result = help(a->next);
while (result)
{
cout << result->val << " ";
result = result->next;
}
system("pause");
return 0;
}

猜你喜欢

转载自blog.csdn.net/zrh_csdn/article/details/79993993