给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。
数据范围: 0\leq n\leq10000≤n≤1000
要求:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n) 。
如当输入链表{1,2,3}时,
经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。
以上转换过程如下图所示:
struct ListNode* ReverseList(struct ListNode* pHead) {
struct ListNode* s, * t;
t = s = NULL;
if (pHead == NULL) return NULL;
while (pHead->next != NULL)//对数组进行遍历
{
t = pHead->next; //保存下一个节点
pHead->next = s; //让当前节点指向上一个节点
s = pHead; //保存这一个节点
pHead = t; //节点后移
}
pHead->next = s; //最后一个节点再指向前一个节点
return pHead;
}