头插法单链表反转,实现单向链表的反转
文章目录倒排链表算法原理代码CppJavaPython
倒排链表
当场翻转链表。该值不能更改。很简单,但是细节很复杂。这里有一个非常容易使用的模板。我100%记得。
原理我们用三个指针pre,cur,nex指向链表。这三个指针在链表中必须是连续的。除了初始初始化。在
开始
中将pre和cur设置为null。这是因为原始第一个节点的next被设置为null。如果反过来,就是最后一次,所以如果不移除,就会连接起来,成为循环链表。然后
NEX我们在链表的起始节点,但事实上不一定是起始节点。如果要翻转链表中心的一部分,把nex放在第一个要翻转的节点上。接着
是最重要的一步。循环求逆算法的一部分,如果用我的模板,这里的细节很简单,很好记。有四个语句:pre=cur,cur=nex,nex=nex-next和cur-next=pre。请按顺序将前三个指针向前移动一步,然后将中间的cur指向pre。也就是反向操作。最后
,如果倒链表是中间部分,请不要忘记再次恢复倒链表。code cppclassolution { public:listnode * reverse list(listnode * NEX){ listnode * pre=nullptr,* cur=nullptrwhile(NEX ) pre=cur,cur=nex,nex=nex-next,cur-next=pre;返回cur};可以看到,使用c总共需要8行代码。
Java类解决方案{ publiclistnodereverselist(ListNode NEX){ ListNode pre=null,cur=null威尔(NEX!=null } { pre=curcur=nexnex=nex.nextcur.next=pre}返回cur} python classsolution 3360 defreverselist(self,NEX:list node(-list node:pre=cur=nonewhilenex 3360 pre,cur,
cur.next=pre
回到中心