这样的思路用代码实现主要是有四行(具体内容懒得写了,作为一只摸鱼王),核心四行在就可
//做一个自定义函数,如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)