反转链表

此博客链接: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;
    }
}

 

上一篇:如何在PHP中比较大数?


下一篇:c – x86上的两个128位整数的有效乘法/除法(无64位)