链表的部分翻转

声明: 本总结仅为个人学习总结,以防止遗忘而作,不得转载和商用。
题目:给定一个链表,翻转该链表从m到n的位置,要求直接翻转而非申请新空间
如: 给定1->2->3->4->5, m=2,n=4, 返回1->4->3->2->5
假定给出的参数满足: 1<=m<=n<=链表长度
分析:
空转m-1次,找到第m-1个结点,即开始翻转的第一个结点的前驱,记做head
以head为起始结点遍历n-m次,将第i次时,将找到的结点插入的head的next中即可. 即头插法
Java版本的实现:

public static void reverse(Node node, int from, int to){
        Node pCur = node.next;
        int i;
        for(i=0;i<from-1;i++){
            node = pCur;
            pCur = pCur.next;
        }
        
        Node pPre = pCur;
        pCur = pCur.next;
        to--;
        Node pNext;
        for(;i<to;i++){
            pNext = pCur.next;
            pCur.next = node.next;
            node.next = pCur;
            pPre.next = pNext;
            pCur = pNext;
        }
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容