题解 | #反转链表#
反转链表
https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca
递归法进行链表反转
用两个指针获取当前节点与后继结点,并逐层递归寻找到后继节点为空时,当前节点为头节点,将传入的returnNode二级指针记录对应头节点地址并返回,逐层将后继节点next指向当前节点,以此完成反转。
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
/**
*
* @param pHead ListNode类
* @return ListNode类
*/
void reverseOne(struct ListNode* currNode, struct ListNode** returnNode)
{
struct ListNode* nextNode = currNode->next;
if(nextNode != NULL)
{
reverseOne(nextNode, returnNode);
nextNode->next = currNode;
return;
}
*returnNode = currNode;
return;
}
struct ListNode* ReverseList(struct ListNode* pHead ) {
// write code here
struct ListNode* returnNode = NULL;
if(pHead == NULL)
{
return NULL;
}
reverseOne(pHead, &returnNode);
pHead->next = NULL;
return returnNode;
}利用三指针进行链表反转
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
/**
*
* @param pHead ListNode类
* @return ListNode类
*/
struct ListNode* ReverseList(struct ListNode* pHead ) {
// write code here
struct ListNode* prevNode;
struct ListNode* curNode;
struct ListNode* nextNode;
if(pHead == NULL)
{
return NULL;
}
curNode = pHead;
nextNode = pHead->next;
curNode->next = NULL;
while(nextNode != NULL)
{
prevNode = curNode;
curNode = nextNode;
nextNode = curNode->next;
curNode->next = prevNode;
}
return curNode;
}#数据结构编程链表#
阿里巴巴灵犀互娱公司福利 668人发布