189 8069 5689

如何实现翻转链表

这篇文章为大家分享实现翻转链表的一道算法题。文章这道题使用了递归和栈等方法实现翻转链表,希望大家通过这篇文章能有所收获。

成都创新互联专业为企业提供察哈尔右翼后网站建设、察哈尔右翼后做网站、察哈尔右翼后网站设计、察哈尔右翼后网站制作等企业网站建设、网页设计与制作、察哈尔右翼后企业网站模板建站服务,十年察哈尔右翼后做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

1 题目

每K个节点一组进行翻转,剩下不足K个的保留原状.

如何实现翻转链表

2 直接翻转

将链表分成三部分,已翻转,待翻转,未翻转三部分:

如何实现翻转链表

首先,用一个指针t表示要插入的位置的前驱,一边把head移动k遍,一边插入在t后面(下图假设k=3):

如何实现翻转链表

int i=0;
for(;i

直接插在t的后面,一轮循环之后,移动t与head.

如何实现翻转链表

t的新位置为未插入head之前的head的位置,因此在插入之前把head的位置保存下来,直接使t移动到该位置,head的位置为自然移动到的位置,不需改变。

ListNode nextTPosition = head;
ListNode temp;
int i=0;
for(;i

接着再翻转,到达7后,7不需要翻转,因为剩下的节点数不足:

如何实现翻转链表

这时就需要i发挥作用了,i表示已翻转的节点的值,因为只是一次遍历,每遍历k次便翻转k次,若i小于k,由于已经翻转了剩下的i个节点,因此需要再将这剩下的i个节点翻转一次:

if(i == k)
    t = nextTPosition;
else
{
    for(head = t.next,t.next=null;head!=null;)
    {
        temp = head.next;
        head.next = t.next;
        t.next = head;
        head = temp;
    }
    break;
}

对剩下的i个节点再次翻转时,不需要修改t的位置,使head指向t.next,再把t.next置为null,因为此时t为

4->7

若不把t.next置为null,在

head.next = t.next

这一步会使head.next指向错误的t.next,导致会在最后一个节点不断循环。
翻转最后的i个节点后,跳出循环,返回结果。

如何实现翻转链表

3 递归

递归的话思路也类似,遍历k次,翻转k个,若还有需要翻转的节点,递归翻转,若没有,翻转剩下的i个节点。

if(i == k)
    t.next = reverse(head,k);

大部分代码与循环相同就不贴了,最大的不同是这里,这里的t为原来未遍历前的head,因为改成递归后,不需要使用t作为移动的指针指示插入的位置,t.next就相当于翻转后的最后一个节点,把递归的结果插入到这个节点的后面。

如何实现翻转链表

4 使用额外空间--栈

因为题目规定只能使用常数的额外空间,因此应该只有这两种方法了,但是,如果允许使用额外的空间,可以使用栈优化直接翻转的算法。

因为出栈的次序正是翻转的顺序,每遍历k个节点就压栈k个节点,若剩余不足k个节点,把head连上dummy,若还有多余的节点或者刚好遍历完,把出栈的节点依次连上主链。

while(true)
{
    Stack s = new Stack<>();
    ListNode temp = head;
    int i=0;
    for(;i

其中for循环为遍历压栈,i==k判断是否翻转链表。

关于实现翻转链表就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果喜欢这篇文章,不如把它分享出去让更多的人看到。


当前标题:如何实现翻转链表
本文URL:http://cdxtjz.cn/article/jejoij.html

联系我们

您好HELLO!
感谢您来到成都网站建设公司,若您有合作意向,请您为我们留言或使用以下方式联系我们, 我们将尽快给你回复,并为您提供真诚的设计服务,谢谢。
  • 电话:028- 86922220 18980695689
  • 商务合作邮箱:631063699@qq.com
  • 合作QQ: 532337155
  • 成都网站设计地址:成都市青羊区锣锅巷31号五金站写字楼6楼

小谭建站工作室

成都小谭网站建设公司拥有多年以上互联网从业经验的团队,始终保持务实的风格,以"帮助客户成功"为已任,专注于提供对客户有价值的服务。 我们已为众企业及上市公司提供专业的网站建设服务。我们不只是一家网站建设的网络公司;我们对营销、技术、管理都有自己独特见解,小谭建站采取“创意+综合+营销”一体化的方式为您提供更专业的服务!

小谭观点

相对传统的成都网站建设公司而言,小谭是互联网中的网站品牌策划,我们精于企业品牌与互联网相结合的整体战略服务。
我们始终认为,网站必须注入企业基因,真正使网站成为企业vi的一部分,让整个网站品牌策划体系变的深入而持久。