Leetcode206

来源:互联网 发布:转行程序员 编辑:程序博客网 时间:2024/06/06 09:10
/** * Definition for singly-linked list. * struct ListNode { *     int val; *     struct ListNode *next; * }; */struct ListNode* reverseList(struct ListNode* head) {    if(!head)  return(NULL);    else {        struct ListNode *pr, *p;        p = head -> next;        pr = NULL;        while(p) {            head -> next = pr;            pr = head;            head = p;            p = p -> next;        }        head -> next = pr;        return(head);    }}


总体思路:

使用三个指针,分别指向前、中、后三个结点。用循环依次修改链表中每一个结点的指针域,使其指向前一个结点。然后再移动三个指针,处理下一个结点。


实现要点:

1.三个指针的创建。

2.修改指针域,移动指针。


时间复杂度分析:

对链表遍历一遍,时间复杂度为O(n)。


遇到的问题:

1.当输入空链表时,访问头结点的下一个结点时报错。

2.结束循环时,最后一个结点的指针域实际上还是指向NULL,需要在结尾进行修改,使其指向前一个结点。

原创粉丝点击