链表反转的两种思路及算法


这样的思路用代码实现主要是有四行(具体内容懒得写了,作为一只摸鱼王),核心四行在就可

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

//做一个自定义函数,如link *turnlink,加一个for循环,进行如下四行
lm->next=lm->next->next;
lr->next=fh->next;
fh->next=lr;
lr=lm->next;

//如果你要实现这个,先搞个链表是基本
link *CreatLink(){
	link*p=(link*)malloc(sizeof(link));
	link *temp=p;
	int i;
	for(i=0;i<5;i++){
		link *a=(link*)malloc(sizeof(link));
		a->data=i;
		a->next=NULL;
		temp->next=a;
		temp=temp->next;	
	}	
} 

//还有开头定义结构体,虽然我喜欢用#ifndef和#endif搞个项目文件,看起来很舒服的那种
typedef struct node{
	int data;
	struct node  *next;
}link;

//然后自定义一个函数,再外部放一个for循环,把四行代码放进去,大概循环几次,就可以反转完毕

```java
//放上学长的java代码块
public ListNode reverseList(ListNode head) {
        if(head == null) {
            return null;
        }
        ListNode fakeHead = new ListNode(0);
        fakeHead.next = head;
        ListNode lr = head.next;
        while ( head.next != null ) {
           head.next = head.next.next;
           lr.next = fakeHead.next;
           fakeHead.next = lr;
           lr = head.next;
        }
        return fakeHead.next;
    }

感谢宇彬学长大佬的思路提供,感觉超棒!超清晰的思路;

至此,我还有一个方法希望大家可以批评指正

核心在于,我们申请一个新的结点,并为其申请内存
然后再0,1,2,3,4的情况下
如下图(画图有点简陋,没有ipad…)
在这里插入图片描述

如图,先让新结点与2相等,然后让1(假设为lm)指向3,也就是lm->next->next,free掉我们需要替换掉的那个结点
okey
然后让新的新的结点(假设为p)指向head(即fh)的next,然后让fh的next指向p
链接起来,okey

(但在算法分析上,这个方法的时间复杂度可能比较让人难爱)

这就是链表,两种新的思路。(其实还有第三种,大概思路是上两种的综合,就不做概论了)
感谢学长!!!!!!!

(ps:画图是自己画的,比较粗糙,第一次发blog,有点简陋,求包涵)
(题来源于leetcode206)

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值