题解 | #重排链表#

重排链表

http://www.nowcoder.com/practice/3d281dc0b3704347846a110bf561ef6b

  1. 计算链表长度,并将链表的节点保存到一个栈中,这样栈顶的节点就是要重新连接的节点

  2. 需要重连的次数为(length-1)/2,对节点进行重连

    class Solution {
    public:
     void reorderList(ListNode *head) {
         stack<ListNode*> stk;
         int length = 0;
         ListNode* curNode = head;
         while(curNode!=nullptr)
         {
             //计算链表的长度
             ++length;
             stk.push(curNode);
             curNode = curNode->next;
    
         }
         curNode = head;        
         for(int i=0;i<(length-1)/2;++i)
         {
             //需要重连的节点
             ListNode* temp = stk.top();
             //if(temp==nullptr)
                 //return;
             temp->next = curNode->next;
             curNode->next = temp;            
             stk.pop();
             //新的链表末尾的元素
             ListNode* tail = stk.top();
             tail->next = nullptr;  
             //更新当前节点
             curNode = curNode->next;
             curNode = curNode->next;  
         }
    
     }
    };
全部评论

相关推荐

像好涩一样好学:这公司我也拿过 基本明确周六加班 工资还凑活 另外下次镜头往上点儿
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务