这样的思路用代码实现主要是有四行(具体内容懒得写了,做为一只摸鱼王),核心四行在就可
//作一个自定义函数,如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; }
感谢宇彬学长大佬的思路提供,感受超棒!超清晰的思路;
至此,我还有一个方法但愿你们能够批评指正java
核心在于,咱们申请一个新的结点,并为其申请内存
而后再0,1,2,3,4的状况下
以下图(画图有点简陋,没有ipad…)
node
如图,先让新结点与2相等,而后让1(假设为lm)指向3,也就是lm->next->next,free掉咱们须要替换掉的那个结点
okey
而后让新的新的结点(假设为p)指向head(即fh)的next,而后让fh的next指向p
连接起来,okey
算法
(但在算法分析上,这个方法的时间复杂度可能比较让人难爱)函数
这就是链表,两种新的思路。(其实还有第三种,大概思路是上两种的综合,就不作概论了)
感谢学长!!!!!!!
spa
(ps:画图是本身画的,比较粗糙,第一次发blog,有点简陋,求包涵)
(题来源于leetcode206)
3d