* struct ListNode {
* int val;
* struct ListNode *next;
* };
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
/**
*
* @param pHead ListNode类
* @return ListNode类
*/
struct ListNode* ReverseList(struct ListNode* pHead )
{
//本题 头结点为第一个结点 pHead
//当为空、或者 只有一个元素时直接退出
if(pHead == NULL)
return NULL;
if(pHead->next == NULL)
return pHead;
//至少两个元素时
//定义两个空指针
struct ListNode *p = NULL;
struct ListNode *temp = NULL;
//p是第二个结点 断开头结点指向空
p = pHead->next;
pHead->next = NULL;
//第二个结点的下一个结点不为空
while(p->next != NULL)
{
//不为空 ,则 temp记录p的下一个结点
temp = p->next;
//结点p 指向头结点
p->next = pHead;
//p设置为头结点
pHead = p;
//把p 拉回来
p = temp;
}
//退出时 p 是最后一个结点 也是最终目标链表头结点
//p 指向头结点
p->next = pHead;
//p设置为头结点
pHead = p;
//返回 pHead
return pHead;
}