NC78 反转链表(牛客网)

描述

给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。

数据范围: 0≤n≤10000≤n≤1000

要求:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n) 。

如当输入链表{1,2,3}时,

经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。

以上转换过程如下图所示:

NC78 反转链表(牛客网)

示例1

输入:

{1,2,3}

复制返回值:

{3,2,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* next = pHead->next;
        ListNode* pre = pHead;
        ListNode* tmp = NULL;
        pHead->next = NULL;
        while(next != NULL){
            tmp = pre;
            pre = next;
            next = next->next;
            pre->next = tmp;
        }
        return pre;
    }
};

上一篇:【SpringMVC 从 0 开始】拦截器介绍


下一篇:Excel 每隔N行N列取N行N列