zoukankan      html  css  js  c++  java
  • leetcode143. Reorder List

    用快慢双指针,可以使慢指针到达中间的时候快指针到达最后一个元素(奇数),或者倒数第二个元素(偶数)。慢指针后面的元素是后半个链表,把后半个链表进行reverse,然后再插在原来的链表中就可以了

    /**
    * Definition for singly-linked list.
    * struct ListNode {
    *     int val;
    *     ListNode *next;
    *     ListNode(int x) : val(x), next(NULL) {}
    * };
    */
    class Solution {
    	ListNode* reverse(ListNode* head)
    	{
    		ListNode* pre;
    		ListNode* cur;
    		cur = head;
    		pre = NULL;
    		while (cur!= NULL)
    		{
    			ListNode* next;
    			next = cur->next;
    			cur->next = pre;
    			pre = cur;
    			cur = next;
    		}
    		return pre;
    	}
    public:
    	void reorderList(ListNode* head) {
    		if (head==NULL||head->next == NULL || head->next->next == NULL)
    			return;
    		ListNode* fast;
    		ListNode* slow;
    		fast = head;
    		slow = head;
    		while (fast->next&&fast->next->next)//出来之后slow的下一个就是后半段.
    		{
    			fast = fast->next->next;
    			slow = slow->next;
    		}
    		ListNode*q;
    		q = reverse(slow->next);
    		slow->next = NULL;
    		ListNode*p;
    		p = head;
    		while (p&&q)
    		{
    			ListNode* temp;
    			temp = new ListNode(q->val);
    			temp->next=p->next; 
    			p->next = temp;
    			p = temp->next;
    			q = q->next;
    		}
    		return;
    	}
    };
    

      

  • 相关阅读:
    创建用户中遇到的问题
    创建用户和用户组
    ActiveMq在linxu系统上的启动
    CentOs 6.5 安装jdk
    卸载CentOs6.5自带的OpenJDK
    centos 6.5 添加ip地址
    CentOs 6.5的安装
    jna的简单测试
    电脑硬盘空间怎么越来越小
    build path contains duplicate entry:'src' for project 'XXX'
  • 原文地址:https://www.cnblogs.com/legendcong/p/9719769.html
Copyright © 2011-2022 走看看