本文最后更新于:2020年6月28日 下午
题目描述:
输入一个链表,反转链表后,输出链表的所有元素。
实现如下:
//此题在线用例还是无头链表→_→
//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;
}
};
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!