天天看点

从尾到头打印链表<剑指offer>

题目描述:输入一个链表,从尾到头打印链表每个节点的值。

链表节点定义:

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

解题思路:

(1)反转链表(2)对应输出链表的值

解题步骤:

(1)如果链表为空,直接返回;如果不为空,继续程序

if(head==NULL)
            return list;
           

(2)反转链表:每次将后面一个节点的next指针指向前一个节点的地址,直到最后一个节点。 由于尾节点的next为NULL即跳出循环时now=NULL,此时需要将头结点head的next置为空,才能作为反转链表的尾节点,同时将head=pre(在跳出循环时,将尾节点赋给了pre);

ListNode *pre,*now,*temp;
        pre=head;
        now=pre->next;


        while(now!=NULL)
        {
            temp = now->next;
            now->next = pre;
            pre = now;
            now = temp;
        }


        head->next=NULL;
        head=pre;

        now=head;
           

(3)输出反转后链表的值

while(now!=NULL)
        {
            list.push_back(now->val);
            now=now->next;
        }
        return list;
           

继续阅读