码迷,mamicode.com
首页 > 其他好文 > 详细

[链表常用技巧]链表逆序+链表中点

时间:2015-09-17 19:31:59      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:

链表逆序

给定一个链表,一般的逆序的方法要设置三个指针,这种操作很繁琐,下面总结一种简单的方法:

技术分享

为链表设置一个头结点,然后head后面的节点依次的插入到head结点之前。最后完成链表的逆序。

代码实现:

ListNode* reverseList(ListNode* head) 
    {
        if(head == NULL)
            return NULL;
            
        ListNode dummy(-1);
        dummy.next = head;
        ListNode *pre = dummy.next;
        
        while(pre->next != NULL)
        {
            ListNode *tmp = pre->next;
            pre->next = tmp->next;
            tmp->next = dummy.next;
            dummy.next = tmp;
        }//while
        
        return dummy.next;
    }

再来看一个链表的中点

查找链表的中点,使用的方法就是快慢指针。但是要注意结点总数为奇数个或者结点总数为偶数个的时候,中点结点指针停止的位置不同。

代码实现:

ListNode *fast = head;
ListNode *low = head;

//利用快慢指针找到链表的中点
while(fast != NULL && fast->next != NULL)
{
	fast = fast->next->next;
	low = low->next;
}
//注意链表结点的个数奇数还是偶数
//偶数结点个数,low指向后半部分的第一个
//奇数结点个数,low指向越过对称中心结点,指向后半部分的第一个结点
if(fast != NULL)
{
	low = low->next;
}

  

 

[链表常用技巧]链表逆序+链表中点

标签:

原文地址:http://www.cnblogs.com/stemon/p/4817031.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!