标签:
给定一个链表,一般的逆序的方法要设置三个指针,这种操作很繁琐,下面总结一种简单的方法:
为链表设置一个头结点,然后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