由于之前做过不少链表的题,对这个题目可以说很快就有了思路。
另外,链表的题不就是指针指来指去吗,这样说都算指针题了
维护两个链表beforeEnd和afterEnd,分别指的是小数尾端和大数尾端
另外的beforeHead和afterHead只需要最开始的时候保存一下(做一个引用)就行了
这里又使用了常用的dummyhead技巧,首先设置一个类似索引为-1的节点,到时找只需要找dummyhead.next就行了,就算没有值,那next就是null,非常巧妙。如果这里初始设置为null的话,还要进行特判,否则会出现null.next的error
还有个重要的点就是,要记得最后afterEnd.next=null;这点一开始忘记设置了,因为这个本来的next可能指向其他的元素。
以下放上代码
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode partition(ListNode head, int x) { ListNode beforeEnd=new ListNode(-1);//小数尾端 ListNode beforeHead=beforeEnd;//小数开头 // ListNode P1=head;//用于遍历的指针 ListNode afterEnd=new ListNode(-1);//大数的尾端 ListNode afterHead=afterEnd;//大数的开头 while(head!=null) { if(head.val<x) { beforeEnd.next=head; beforeEnd=head; head=head.next; } else { afterEnd.next=head; afterEnd=head; head=head.next; } } afterEnd.next=null;//这个很重要忘记设置了 //连接起两段 beforeEnd.next=afterHead.next;//P3可能为null,不过那也没关系。P2可能为我设的假值,不过也没关系 return beforeHead.next; } }