问题一: 链表的反序
1ListNode* reverseList(ListNode* head)
2{
3 ListNode *p1, *p2 , *p3;
4 //链表为空,或是单结点链表直接返回头结点
5 if (head == NULL || head->next == NULL)
6 return head;
7 p1 = head;
8 p2 = head->next;
9 while (p2 != NULL)
10 {
11 p3 = p2->next;
12 p2->next = p1;
13 p1 = p2;
14 p2 = p3;
15 }
16 head->next = NULL;
17 head = p1;
18 return head;
19}
问题二: 找出链表的中间元素
1ListNode* find_midlist(ListNode* head)
2{
3 ListNode *p1, *p2;
4 if (head == NULL || head->next == NULL)
5 return head;
6 p1 = p2 = head;
7 while (1)
8 {
9 if (p2->next != NULL && p2->next->next != NULL)
10 {
11 p2 = p2->next->next;
12 p1 = p1->next;
13 }
14 else
15 break;
16 }
17 return p1;
18}
问题三:判断一个单链表是否有环
1 int is_looplist (ListNode *head)
2 {
3 ListNode *p1, *p2;
4 p1 = p2 = head;
5 if (head == NULL || head->next == NULL)
6 return 0;
7 while (p2->next != NULL && p2->next->next != NULL)
8 {
9 p1 = p1->next;
10 p2 = p2->next->next;
11 if (p1 == p2)
12 return 1;
13 }
14 return 0;
15 }
浙公网安备 33010602011771号