java 将最小值和最大值分别移到链表的头和尾

bqf10yzr  于 2023-02-02  发布在  Java
关注(0)|答案(3)|浏览(130)

如何返回一个head为最小元素,tail为最大元素的链表?
函数shiftSmallLarge()将链表的头节点作为参数,并在执行两次移位后返回头指针。

static Node shiftSmallLarge(Node head){
if(head==null){
  return null;
}
  Node temp=head;
  Node min=head;
  Node max=head;
  while(temp.next!=null){
  
    if(temp.data<min.data){
      min=temp;
    }
    if(temp.data>max.data){
      max=temp;
    }
    temp=temp.next;
  }
  
}
avwztpqn

avwztpqn1#

你可以通过两个指针从null开始初始化一个指针,从表头开始初始化另一个指针,得到链表中的上一个节点,从表头开始迭代初始化的另一个节点,直到你想要的节点,在第二个节点之前迭代第一个节点。

e4eetjau

e4eetjau2#

用O做遍历链表,找到两个节点(最小节点和最小节点之前的节点)。同样,再找到两个节点(最大节点和最大节点之前的节点)。现在将最小节点作为头节点,并调整链接列表的连续性,因为您有最小节点之前的节点。同样,调整最后的最大节点,因为您有最大的节点和它前面的节点。

camsedfj

camsedfj3#

我认为下面的代码将工作,但它太大。我不能减少它。如果你有更好的想法,请纠正我。
`''

def shiftSmallLarge(head):
      if not  head or not head.next:
         return head
      pre=None
      minpre=None;maxpre=None
      mini=head;maxi=head
      curr=head
      while(curr):
        if curr.data<mini.data:
          minpre=pre
          mini=curr
        if curr.data>maxi.data:
          maxpre=pre
          maxi=curr
        pre=curr
        curr=curr.next
      if mini==head and maxi==pre:
        return head
      elif minpre==None:
        maxpre.next=maxi.next
        pre.next=maxi
        maxi.next=None
        return head
      elif maxpre==None:
        if maxi.next==mini :
          pre.next=maxi
          head=head.next
          maxi.next=None
          return head
        head=head.next
        minpre.next=mini.next
        mini.next=head
        head=mini
        if pre != mini:
           pre.next=maxi
        else:
           minpre.next=maxi
        maxi.next=None
        return head
      else:
        minpre.next=mini.next
        mini.next=head
        head=mini
        if maxpre==mini:
           minpre.next=maxi.next
        else:
           maxpre.next=maxi.next
        pre.next=maxi
        maxi.next=None
        return head

''`

相关问题