86. Partition List

该题题意为让小于指定值的节点位于链表前面,大于等于指定值的节点在链表后面,且保留原有顺序。

在这里我们首先为链表增加一个伪链表头prehead,这个链表头的next指向head。

定义三个指针,

1)插入指针insertnode为空

2)遍历指针cur指向head

3)指向遍历指针前面节点的指针prenode,此时prenode应该指向prehead。

然后当当前指针cur不为空的时候对链表进行循环遍历

1)当cur的值大于等于指定值的时候且插入指针还是空的时候,将插入指针指向prenode。

2)如果cur的值小于指定值且插入指针不为空的时候,将当前节点插入到插入节点后面,并让插入指针指向插入到新插入的节点,prenode以及cur继续指向下一个节点。

代码如下:

 1 /**
 2  * Definition for singly-linked list.
 3  * public class ListNode {
 4  *     int val;
 5  *     ListNode next;
 6  *     ListNode(int x) { val = x; }
 7  * }
 8  */
 9 class Solution {
10     public ListNode partition(ListNode head, int x) {
11         ListNode prehead = new ListNode(0);
12         prehead.next = head;
13         ListNode cur = head;
14         ListNode insertnode = null;
15         ListNode prenode = prehead;
16         
17         while(cur != null){
18             if( cur.val >= x && insertnode == null ){
19                 insertnode = prenode; 
20             }
21             
22             if( cur.val < x && insertnode != null){
23                 prenode.next = cur.next;
24                 cur.next = insertnode.next;
25                 insertnode.next = cur;
26                 insertnode = insertnode.next;
27                 cur = prenode.next;
28                 continue;
29             }
30             
31             prenode = prenode.next;
32             cur = cur.next;
33             
34         }
35         
36         return prehead.next;
37     }
38 }

END

原文地址:https://www.cnblogs.com/sssysukww/p/8892911.html