链表逆序

作者: 徐凯_xp | 来源:发表于2018-03-05 00:36 被阅读5次

定义ListNode节点结构体

struct ListNode {
     int val;
     ListNode *next;
     ListNode(int x) : val(x),next(NULL)
}

例题:
链表链接

int main(){
    ListNode a(10);
    ListNode b(20);
    ListNode c(30);
    ListNode d(40);
    ListNode e(50);

    a.next = & b;
    b.next = & c;
    c.next = & d;
    d.next = & e;
    ListNode *head = & a;
    while(head){
        print("%d %p %P\n,head->val, head,head->next");
        head = head->next
    }
    return 0;
    
}

LeetCode 206. Reverse Linked List

Eg1.链表逆序

一只链表头节点,指针head,将链表逆序。(不可申请额外空间)

链表数据结构

struct  ListNode{
int val;
ListNode  *next;
ListNode(int x) : val(x),next(NULL){}
};

打印head指针指向的链表

void print_list(ListNode * head,const char *List_name){
    printf("%S :",List_name);
    if(!head){
        printf("NULL\n");
        return;
    }
    while(head){
        printf("%d",head->val);
        head = head->next;
    }
    printf("\n");
}

1.构造5个节点a,b,c,d,e,并对它们进行初始化;
2.将a,b,c,d,e,5个节点连接在一起

int main(){
    ListNode a(1);
    ListNode b(2);
    ListNode c(3);
    ListNode d(4);
    ListNode e(5);
    a.next = &b;
    b.next = &c;
    c.next = &d;
    d.next = &e;

    ListNode *head =&a;
    ListNode *new_head = NULL;
    LIstNode *next = NULL;
    print_list(head,"old");
    print_list(new_head,"new");
    return 0;


}

1、就地逆置法

1.备份head->next
2.修改head->next
3.移动head与new_head


class Solution{
public :
    ListNode *reverseList(ListNode * head){
    ListNode *new_head =NULL;//指向新链表头节点的指针
    while(head){
     ListNode * next = head->next;//备份head->next
     head->next = new_head; //更新head->next
     new_head = head_next; //移动new_head
     head = next;//遍历链表
     
}
return new_head;//返回新链表头节点
}
}

2、头插法

设置一个临时头节点temp_head,利用head指针遍历链表,每遍历一个节点即将该节点插入到temp_head后

1.备份next = head->next;
2.修改head->next
3.temp_head.next
4.移动head


class Solution{
public:
    ListNode * reverseList(ListNode * head){
    ListNode temp_head(0);
    while(head){
    ListNode *next = head->next;
    head->next = temp_head.next;
    temp_head.next = head;
    head =next;
}
    return temp_head.next;
}
}

相关文章

  • Python 将链表逆序

    说明:链表逆序,是将链表中的单向链表逆序,双向链表逆序和正序都是一样的,所以没有任何意义。 代码: class N...

  • 2.单链表

    该部分包含以下内容-单链表的增删改查-计算链表长度-逆序链表-寻找(删除)链表倒数第K个元素-逆序打印链表(使用栈)

  • LeetCode 2. Add Two Numbers

    单链表逆序相加

  • 链表逆序

    定义ListNode节点结构体 例题:链表链接 LeetCode 206. Reverse Linked Lis...

  • 链表逆序

    -(void)reverse(node *head) { node*per,; node *current = h...

  • 链表逆序

    链表逆序 1.基础 链表是一种递归的数据结构,它或者为空,或者是指向一个结点(node)的引用,该结点含有一个泛型...

  • 链表逆序

    如A->B->C->D->E 思路一: 先取出链表的最后一个E,然后将E作为新链表的头, 现在状态为 原始链表:A...

  • 链表逆序

    面试中有的时候会让我们写一个简单单链表逆序。 我们遍历链表从头结点,一直遍历到尾节点。例如从头至尾分别是1,2,3...

  • 链表

    模板 多次删除 逆序(反向)链表

  • 算法学习之二: 链表逆序

    链表的定义,链表包括两个部分,数据data 和下一个节点 next 链表逆序: 这样就可以起到逆序的结果,为了测试...

网友评论

    本文标题:链表逆序

    本文链接:https://www.haomeiwen.com/subject/ehfxfftx.html