最近在准备后端面试,刷刷以前的算法题,用自己的方法独立做出来。
反转链表有两种方法
一是在链表上直接操作,这样做会破坏传进来的链表,但是节省了空间。
具体思路是:
falsehead 1 2 3 4 5
falsehead 2 1 3 4 5
falsehead 3 2 1 4 5
falsehead 4 3 2 1 5
falsehead 5 4 3 2 1
return falsehead->Next;
一言以蔽之,从数字2开始,把数字一个一个的插入到falsehead后面。
List Reverse(List L)
{
if (L == NULL)return NULL;List falsehead=(List)malloc(sizeof(struct Node));//给一个假头
falsehead->Data = -1;
falsehead->Next = L;
List p = L->Next;//从第二个数字开始遍历
while (p != NULL) {
List t = p->Next;//找到p之后的节点,记为t
List l = falsehead->Next;
for (l = falsehead->Next; l->Next != p; l = l->Next);//找到p之前的一个节点,记为l
p->Next =falsehead->Next;//把p插入falsehead后面
falsehead->Next = p;
l->Next = t;//让p之前的节点指向p之后的节点
p = t;//把p置为p后面的节点
}
return falsehead->Next;}