此博客链接:https://www.cnblogs.com/ping2yingshi/p/12753149.html
反转链表(47min)
题目链接:https://leetcode-cn.com/problems/partition-list/
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
示例:
输入: head = 1->4->3->2->5->2, x = 3
输出: 1->2->2->4->3->5
题解:
此题真是题目读了好几遍,也没有看懂为啥4要在3前面输出,后来刷了题解才明白为啥。因为题目说保持每个节点的初始相对位置。
思路:
1.创建两个节点,一个保存小于x的数,一个保存大于等于x的数。
2.当链表中的值小于x时,连接到小链表中;当链表中的值大于x时,链接到大链表中。
3.整个链表遍历完后,把大链表的头结点接到小链表的尾部。
4.返回小链表的头节点。
代码如下:
class Solution { public ListNode partition(ListNode head, int x) { ListNode biglink = new ListNode(0); ListNode smallink = new ListNode(0); ListNode bignum = biglink; ListNode smallnum = smallink; ListNode p=head; while(p!=null) { if(p.val>=x) { bignum.next=p; bignum=bignum.next; } else{ smallnum.next=p; smallnum=smallnum.next; } p=p.next; } smallnum.next=biglink.next; bignum.next=null; return smallink.next; } }