您的位置:首页 > Web前端

剑指Offer——(15)反转链表

2017-05-07 19:03 316 查看
题目描述:

输入一个链表,反转链表后,输出链表的所有元素。

实现如下:

//此题在线用例还是无头链表→_→
//1<-2<-3 4->5
//   p  s q
//保证三个指针指向相邻的三个节点
//健壮性:
//1.传入空指针
//2.链表中只有一个节点
/*节点结构体定义
struct ListNode
{
int val;
struct ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
*/
class Solution
{
public:
ListNode* ReverseList(ListNode* pHead)
{
if (pHead == NULL) return NULL;//放置传入空指针

ListNode *p = pHead;
ListNode *s = pHead->next;
ListNode *q = pHead;
p->next = NULL;//首先将第一个节点的next赋值为NULL
while (s != NULL)//判断是否还有为反转节点
{
q = s->next;//预先保存s的next
s->next = p;//连到已反转链表
p = s;//指向已反转链表的第一个节点
s = q;//指向未反转链表的第一个节点
}
return p;
}
};

//使用两个指针,用pHead代替上面方法的p的作用
class Solution
{
public:
ListNode* ReverseList(ListNode* pHead)
{
if (pHead == NULL) return NULL;

ListNode *p = pHead;
ListNode *s = pHead->next;
pHead->next = NULL;
while (s != NULL)
{
p = s;
s = s->next;//保存下一个未反转节点
p->next = pHead;
pHead = p;
}
return pHead;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息