数据结构之链表分块

来源:互联网 发布:物流运输软件 编辑:程序博客网 时间:2024/05/21 10:37

关于怎么将一个链表分成两个部分,就是用注明的快慢指针的办法,当然快慢指针还有很多的用法。

利用一个快指针pfast和一个慢指针pslow,pslow每次做一次pslow->next,pfast步长为2,做pfast->next->next。利用两个指针的步长不通,当pfast或者pfast->next指向NULL,pslow指向的就是中间的位置。大家可以画几个链表分析一下,slow此时指向的节点,要前一个位置分开才刚刚好,比如4个节点时从pslow断开就不行。所以添加另外一个指针pre指向pslow前一次的位置即可。

struct ListNode {      int val;      ListNode *next;      ListNode(int x) : val(x), next(NULL) {}};void divideList(ListNode *head){ if(head==NULL||head->next==NULL)return; ListNode* pslow=head;//慢指针  ListNode* pfast=head; //快指针  ListNode* pre;//记录慢指针位置,为后半部分链表的表头  while(pfast!=NULL&&pfast->next!=NULL){ pre=pslow;  pslow=pslow->next;//慢指针步长为1  pfast=pfast->next->next;//快指针步长为2  } pre->next=NULL;} 

0 0
原创粉丝点击