赞
踩
题目:
实现一个链表反转的算法,注意算法的鲁棒性。
注:
链表结点的定义如下:
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :val(x), next(NULL) {}
};
直接上代码:
- ListNode* ReverseList(ListNode* pHead)
- {
- // 如果链表为空或者只有一个结点 直接返回即可。
- if(pHead == NULL || pHead->next == NULL)
- {
- return pHead;
- }
-
- // 定义相邻3个辅助结点指针
- // p 指向待处理的结点
- // q 指向待处理的结点的下一个结点
- // r 指向当前已处理完毕的结点
-
- ListNode *p = pHead, *q = pHead->next, *r = pHead;
- p->next = NULL;
- p = q;
-
- while(p)
- {
- q = p->next; // 保存待处理结点的下一个结点
- p->next = r; // 链接到上一个结点
- r = p; // 当前结点已处理完毕 更新
- p = q; // 更新待处理的结点
- }
-
- return r;
- }
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。