java链表算法题一

来源:互联网 发布:js获取index 编辑:程序博客网 时间:2024/06/04 00:26
题目描述

编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前
给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。

解答如下:

import java.util.*;/*** 单向链表节点类*/class ListNode {    int val;                 //链表节点中的值    ListNode next = null;    //下一个节点引用    ListNode(int val) {        this.val = val;    }}/*** 算法实现类*/public class Partition {    public ListNode partition(ListNode pHead, int x) {        if(pHead!=null&&pHead.next==null)return pHead;        ListNode endNode = pHead;        int size = 1;             //链表的节点个数        while(endNode.next!=null){            endNode = endNode.next;            size++;        }        ListNode startNode = pHead;        ListNode pointNode = null;        int j = 1;                //遍历节点的计数器        while((startNode!=null)&&(j<=size)){            //头节点大于x的情况            if((startNode == pHead) && startNode.val>=x){                pHead = pHead.next;                endNode.next = startNode;                startNode.next = null;                endNode = endNode.next;                startNode = pHead;                pointNode = startNode;                j++;            }else if(startNode.val<x){        //节点小于x的处理方式                pointNode = startNode;                startNode = startNode.next;                j++;            }else if((startNode != pHead) && startNode.val>=x){         //非头节点大于x的情况                endNode.next = startNode;                pointNode.next = startNode.next;                startNode.next = null;                startNode = pointNode.next;                endNode = endNode.next;                j++;            }        }        return pHead;    }}

算法学习,贵在坚持。
炼心问道,砥砺前行!

原创粉丝点击