标签:node head 单链 ListNode 反转 nullptr next new 四种
题目:
输入一个单链表,反转该链表并输出
输入:
1->2->3->4->5
输出:
5->4->3->2->1
代码示例:
//就地反转
ListNode * reverse1(ListNode *node)
{
if (node == nullptr)
{
return node;
}
ListNode *head = new ListNode(-1);
head->next = node;
ListNode *curNode = node;
ListNode *nextNode = curNode->next;
while (nextNode != nullptr) {
curNode->next = nextNode->next;
nextNode->next = head->next;
head->next = nextNode;
nextNode = curNode->next;
}
return head->next;
}
//头插法
ListNode * reverse2(ListNode *node)
{
ListNode *preNode = new ListNode(-1);
ListNode *pCur = node;
while (pCur != nullptr) {
ListNode *pNext = pCur->next;
pCur->next = preNode->next;
preNode->next = pCur;
pCur = pNext;
}
return preNode->next;
}
//迭代
ListNode * reverse3(ListNode *node)
{
ListNode *prev = nullptr;
while(node != nullptr){
ListNode *tmpNode = node->next;
node->next = prev;
prev = node;
node = tmpNode;
}
return prev;
}
//递归
ListNode * reverse4(ListNode *node)
{
if(node == nullptr|| node->next == nullptr)
{
return node;
}
ListNode *prev = reverse4(node->next);
node->next->next = node;
node->next = nullptr;
return prev;
}
//创建初始化链表
ListNode * createListNode()
{
ListNode *head = nullptr;
ListNode *node1 = new ListNode(1);
ListNode *node2 = new ListNode(2);
ListNode *node3 = new ListNode(3);
ListNode *node4 = new ListNode(4);
ListNode *node5 = new ListNode(5);
head = node1;
node1->next = node2;
node2->next = node3;
node3->next = node4;
node4->next = node5;
node5->next = nullptr;
ListNode *newHead = reverse(head);
while (newHead != nullptr)
{
qDebug() << newHead->val;
newHead = newHead->next;
}
}
标签:node,head,单链,ListNode,反转,nullptr,next,new,四种 来源: https://blog.csdn.net/qqzhaojianbiao/article/details/120907943
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。