算法总结之 反转部分单向链表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法总结之 反转部分单向链表相关的知识,希望对你有一定的参考价值。

给定单链表的表头节点head, 以及两个整数from 和 to, 在单向链表上把fro个节点到第to个节点这一部分进行反转

思路:

  本题 有可能存在换头的问题,所以函数应该返回调整后的新的头节点

  1 判断是否满足 1<=from<=to<=N 如果不满足,直接返回原来的头节点

  2 找到第from-1个节点pre和第to+1个节点tPos,fPre即要反转部分的前一个节点,tPos是反转部分的后一个节点,把反转部分先反转,然后正确的链接fPre和tPos

package TT;

import TT.Test85.Node;

public class Test90 {

    public Node reversePart(Node head, int from , int to){
        int len = 0;
        Node node1=head;
        Node fPre = null;
        Node tPos = nullwhile(node1!= null){ 
           len++;
           fPre = len == from-1 ? node1 : fPre;
           tPos = len== to+1 ? node1 : tPos;
           node1 =node1.next;
       }
        if(from<to || from<1 || to>len){
            return head;
        }
        node1 = fPre==null ? head:fPre.next;
        Node node2 = node1.next;
        node1.next = tPos;
        Node next = null;
        while(node2 !=tPos){
             next = node2.next;
             node2.next = node1;
             node1 = node2;
             node2 = next;
        }
        if(fPre != null){
            fPre.next=node1;
            return head;
        }
        return node1;
    }
    
    
    
}

 

以上是关于算法总结之 反转部分单向链表的主要内容,如果未能解决你的问题,请参考以下文章

数据结构和算法之单向链表六:链表的反转以及链表节点的删除

C语言反转单向链表的代码

[算法]反转单向链表和双向链表

反转部分单向链表

2.5 反转部分单向链表

单向链表反转算法——递归版和迭代版